首页 > 解决方案 > WPF DataGrid MultiBinding 到 DataGrid 的 ItemSource 中的类

问题描述

这是我的第一个 WPF 应用程序。我目前有一个绑定到实体框架对象的 DataGrid。该对象包含一个类作为其联系人项目之一(名字、中间名等)。

所以我的问题是:如何使用该类的元素在数据列上使用 MultiBinding?

这是代码。我正在尝试使用转换器绑定联系人名称。转换器根据传递的参数显示名称。

<DataGrid Grid.Row="2"
    x:Name="GridResult" 
    AutoGenerateColumns="False" 
    CanUserAddRows="False" 
    MinHeight="{Binding DataGridMinHeight}"
    ItemsSource="{Binding Results}"
    BorderBrush="{StaticResource DarkBlueBrush}"
    BorderThickness="0 1 0 0"
    SelectedItem="{Binding SelectedItem, Mode=TwoWay}"
    IsReadOnly="True"
    FontFamily="{StaticResource DefaultFont}"
    HeadersVisibility="Column"
    ColumnHeaderStyle="{StaticResource DataGridHeaderCenter}">
        <DataGrid.InputBindings>
            <MouseBinding Gesture="LeftDoubleClick" 
                Command="{Binding DetailsCommand}"
                CommandParameter="{Binding ElementName=GridResult, Path=SelectedItem.AssistanceId}" />  
        </DataGrid.InputBindings>
        <DataGrid.Columns>
            <DataGridTextColumn x:Name="NameColumn" 
                Binding="{Binding LinkName}" 
                Header="Reference" 
                Width="Auto" />
            <DataGridTextColumn x:Name="CompanyColumn" 
                Binding="{Binding Company.CompanyName}" 
                Header="Company"
                Width="Auto" />
            <DataGridTextColumn x:Name="ContactColumn" 
                Header="Contact"
                Width="Auto" > 
                    <DataGridTextColumn.Binding>
                        <MultiBinding Converter="{StaticResource NameConverter}" ConverterParameter="LastNameFirst" >
                            <Binding Source="Contact" Path="Salutation"/>
                            <Binding Source="Contact" Path="FirstName"/>
                            <Binding Source="Contact" Path="MiddleName"/>
                            <Binding Source="Contact" Path="LastName"/>
                            <Binding Source="Contact" Path="Suffix"/>
                        </MultiBinding>
                    </DataGridTextColumn.Binding>    
                </DataGridTextColumn>
            </DataGrid.Columns>
 </DataGrid>

编辑:添加结果照片 搜索结果

标签: wpfentity-frameworkmvvmdata-bindingwpfdatagrid

解决方案


所以我想通了。与其尝试将 Contact 类的每个元素传递给 MultiBinding,不如只传递类本身。然后使用转换器访问类元素(即名字、姓氏等)以返回所需的输出字符串。

<DataGridTextColumn x:Name="ContactColumn" 
    Header="Contact"
    Width="Auto"
    >
    <DataGridTextColumn.Binding>
        <MultiBinding Converter="{StaticResource NameConverter}" ConverterParameter="LastNameFirst">
            <Binding Path="Contact"/>
        </MultiBinding>
    </DataGridTextColumn.Binding>
</DataGridTextColumn>

推荐阅读