WPF DataGrid MultiBinding到DataGrid ItemSsource中的类

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF DataGrid MultiBinding到DataGrid ItemSsource中的类相关的知识,希望对你有一定的参考价值。

这是我的第一个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>

编辑:添加结果Search Result的照片

答案

所以我明白了。不要试图将Contact Class的每个元素传递给MultiBinding,只需传递类本身即可。然后使用转换器访问类元素(即名字,姓氏等)以返回所需的输出字符串。

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

以上是关于WPF DataGrid MultiBinding到DataGrid ItemSsource中的类的主要内容,如果未能解决你的问题,请参考以下文章

WPF Multibinding - 需要使用 Relaycommand

WPF 多值绑定(MultiBinding)与多属性触发器(MultiTrigger)与多数据触发器(MultiDataTrigger)

是否可以在 WPF 的 MultiBinding QuickConverter 中使用带有参数的经典转换器?

wpf datagrid怎么得到焦点?用datagrid.focus()不行

wpf datagrid 多行表头

wpf datagrid 怎么增加数据行