WPF 多重绑定 .Net Framework 4.0

Posted

技术标签:

【中文标题】WPF 多重绑定 .Net Framework 4.0【英文标题】:WPF Multibinding .Net Framework 4.0 【发布时间】:2012-11-11 04:25:21 【问题描述】:

我有以下 DataGridTemplate 列:

<DataGridTemplateColumn x:Name="specialtiesColumn" Header="Specialties" MinWidth="170">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <ComboBox ItemsSource="Binding Path=DataContext.Specialties, Mode=OneWay, RelativeSource=RelativeSource FindAncestor, AncestorType=DataGrid">
                <ComboBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Height="17" VerticalAlignment="Center" Orientation="Horizontal">
                            <CheckBox Width="20">
                                <CheckBox.IsChecked>
                                    <MultiBinding Converter="StaticResource ProviderSpecialtyIsInSpecialtiesConverter">
                                        <Binding RelativeSource="RelativeSource FindAncestor, AncestorType=ComboBox" Path="DataContext.Specialties" />
                                        <Binding Path="Name" />
                                    </MultiBinding>
                                </CheckBox.IsChecked>
                            </CheckBox>
                            <TextBlock Text="Binding Name" Width="130" />
                        </StackPanel>
                    </DataTemplate>
                </ComboBox.ItemTemplate>
            </ComboBox>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

我想要做的是在数据网格中有一列组合框,每个组合框都有几个复选框。数据网格的每一行代表医院。组合框会显示医院有哪些专科,用户也应该能够修改这些选择。

这是转换器的代码:

public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)

    try
    
        HashSet<Specialty> specialties = (HashSet<Specialty>)values[0];
        string specialty = (string)values[1];

        foreach (Specialty s in specialties)
        
            if (s.Name == specialty)
                return true;
        

        return false;
    
    catch (Exception)
    
        return false;
    

这适用于使用 .Net Framework 4.5 的计算机,但在尝试仅使用 .Net Framework 4.0 加载时会崩溃。该项目面向 .Net Framework 4.0。

【问题讨论】:

您在崩溃时收到的信息是什么? 【参考方案1】:

我想原因是 MultiBinding 使用的是 RelativeSource,而 DataGridColumn 不是可视树的一部分。他们必须在 4.5 中修复了列绑定行为。我的代码看起来像这样,我遇到了同样的问题:

<DataGridTextColumn.Binding>
    <MultiBinding Converter="StaticResource directionConverter">
        <MultiBinding.Bindings>
            <Binding ElementName="clientPerspective" Path="IsChecked"/>
            <Binding Path="Direction"/>
        </MultiBinding.Bindings>
    </MultiBinding>
</DataGridTextColumn.Binding>`

【讨论】:

以上是关于WPF 多重绑定 .Net Framework 4.0的主要内容,如果未能解决你的问题,请参考以下文章

WPF:多重绑定不使用 OnPropertyChanged 更新?

2021-09-15 WPF上位机 17-属性绑定(多重绑定)

WPF:写入矩形取决于使用多重绑定的鼠标位置

WPF 和.NET的关系 我想知道WPF有几个版本 他们对应的Framework又是哪个版本 单独.NET 4.0可以做WPF吗

使用多重绑定设置c#wpf组合框背景颜色[关闭]

WPF .Net 4 - OneWayToSource 绑定到只写属性适用于某些机器!如何?