首页 > 解决方案 > WPF 中的条件 DataGrid MultiBinding

问题描述

我在 WPF 窗口中有一个 DataGrid,它的 itemsSource 可能会根据条件而有所不同。如果条件为真,则 itemsSource 被设置为类型 A 的对象列表,否则设置为类型 B 的对象列表。在 DatagridColumns 我有一些 DataGridTextColumn 应该根据 itemsSource 的类型绑定到 classA 或 classB 的成员。

<DataGrid  x:Name="MyDataGrid">
    <DataGrid.Columns >
        <DataGridTextColumn Header="Title">
             <DataGridTextColumn.Binding>
                  <MultiBinding>
                       <Binding Path= "MemberOfClassA"/>
                       <Binding Path= "MemberOfClassB"/>
                 </MultiBinding>
             </DataGridTextColumn.Binding>
          </DataGridTextColumn>
    </DataGrid.Columns>
</DataGrid>

在我的 C# 代码中,我有:

ClassA
{
    public string MemberOfClassA {get;set;}
    ...
}
ClassB
{
    public string MemberOfClassB {get;set;}
    ...
}

List<ClassA> listA = ...;
List<ClassB> listB = ...;

MyDataGrid.ItemsSource = condtion? listA : listB;

如何为 MultiBinding 实现转换器以根据条件选择绑定路径。任何替代建议也将不胜感激。

标签: c#wpfmultibinding

解决方案


如果数据网格的列将不同,那么更改列绑定将相当混乱。

您可以创建两个用户控件,每个控件都有一个数据网格。给你一个适合每个人的数据网格。

将内容控件的内容切换到适当的内容。

通过使用数据模板选择器或将两个集合放入两种不同的视图模型类型并使用数据类型选择适当的用户控件作为数据模板。


推荐阅读