将单个WPF控件绑定到多个项目

时间:2014-07-03 18:57:40

标签: c# wpf

我正在尝试在我正在处理的编辑器中创建一个属性面板,我希望能够在视图中修改多个选定的项目。我无法想出一个直截了当的" WPF"这样做的方式不涉及大量代码或类型特定的转换器或实现。有什么建议,以最干净的方式完成这样的事情?只是为了具体化,这就是我所说的:

enter image description here

" 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,但如果有一个至少有些通用的解决方案,那就太好了。

2 个答案:

答案 0 :(得分:0)

  

源绑定会聚合当前属性值   共识

创建一个名为XYZ的新属性,该属性聚合其他属性并在Xaml中绑定到它。除非绑定了其他聚合属性,否则您无需为他们调用Notify Property Changed,但您将在其中调用OnPropertyChanged("XYZ")

因此,聚合中的任何更改都会冒泡到新属性,并且其通知属性会将气泡更改为Xaml。添加具有类似颜色/可见性/启用等过程的其他属性

请参阅我对MVVM update of calculated properties的回答。

答案 1 :(得分:0)

我个人的解决方案是建立一个选择列表,尽管这假设屏幕上的所有对象都属于同一类型。然后,一旦完成对象选择并更改属性,它将触发循环遍历列表的事件并更新所选属性的属性。这有点低效,因为它每次都会迭代每个属性,但我认为&#34;自动&#34;随之而来的缩放将有助于平衡必须编写额外代码。

这是一些伪代码,可以更清楚地展示我在说什么:

  1. 单击/选择项目,添加到SelectedList,多次执行
  2. 更改属性/属性
  3. 点击“应用”按钮或类似的内容
  4. SelectedList中的Foreach对象将每个属性设置为选定属性
  5. 完成
  6. 如上所述,此方法适用于任何数字对象。

相关问题