【发布时间】:2014-08-25 00:43:40
【问题描述】:
我正在尝试在我正在使用的编辑器中创建一个属性面板,我希望能够在其中修改视图中的多个选定项目。我想不出一个直接的“WPF”方式来做到这一点,它既不涉及大量代码背后的代码,也不涉及特定于类型的转换器或实现。对于完成这样的事情的最干净的方法有什么建议吗?只是为了具体一点,这就是我要说的:
右侧的“提示”作为 ItemsControl 实现,因此我将属性面板绑定到 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 确保面板仅在选择一个项目时可用,但我希望能够同时绑定到多个项目。理想情况下,源绑定将聚合当前属性值以达成共识(并且在存在多个值时不显示任何内容)。我最感兴趣的设置是颜色,但如果有一个至少有点通用的解决方案会很好。
【问题讨论】:
-
你能用一个多值转换器吗?仍然会有点棘手,但它可以根据接收到的
Values数组的长度返回null。 -
我是否理解正确,您希望基本上选择多个并将所有颜色(和其他属性)一次更改为相同的值?
-
看来你应该在 ViewModel 级别实现这样的逻辑,并在 UI 端使用简单的
ItemsControl来实现类似 PropertyGrid 的 UI。 -
@PseudoNym01 没错。
-
@BradleyDotNET 可能,虽然我不确定我到底是怎么看的。