我正在尝试在我正在处理的编辑器中创建一个属性面板,我希望能够在视图中修改多个选定的项目。我无法想出一个直截了当的" WPF"这样做的方式不涉及大量代码或类型特定的转换器或实现。有什么建议,以最干净的方式完成这样的事情?只是为了具体化,这就是我所说的:
" cues"右边是作为ItemsControl实现的,所以我将Properties面板绑定到SelectedItems属性,如下所示:
<ContentControl>
<ContentControl.Style>
<Style TargetType="{x:Type ContentControl}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Count}" Value="1">
<Setter Property="Content" Value="{Binding Path=[0]}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
DataTrigger确保面板仅在选择一个项目时可用,但我希望能够同时绑定到多个项目。理想情况下,源绑定会聚合当前属性值以达成共识(并且在存在多个值时不显示任何内容)。我最感兴趣的设置是Color,但如果有一个至少有些通用的解决方案,那就太好了。
答案 0 :(得分:0)
源绑定会聚合当前属性值 共识
创建一个名为XYZ
的新属性,该属性聚合其他属性并在Xaml中绑定到它。除非绑定了其他聚合属性,否则您无需为他们调用Notify Property Changed,但您将在其中调用OnPropertyChanged("XYZ")
。
因此,聚合中的任何更改都会冒泡到新属性,并且其通知属性会将气泡更改为Xaml。添加具有类似颜色/可见性/启用等过程的其他属性
请参阅我对MVVM update of calculated properties的回答。
答案 1 :(得分:0)
我个人的解决方案是建立一个选择列表,尽管这假设屏幕上的所有对象都属于同一类型。然后,一旦完成对象选择并更改属性,它将触发循环遍历列表的事件并更新所选属性的属性。这有点低效,因为它每次都会迭代每个属性,但我认为&#34;自动&#34;随之而来的缩放将有助于平衡必须编写额外代码。
这是一些伪代码,可以更清楚地展示我在说什么:
如上所述,此方法适用于任何数字对象。