WPF多绑定 .Net Framework 4.0

4

我有一个如下的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 设计的。


3
你在崩溃时收到了什么信息? - Rohit Vats
1个回答

0
我认为这个问题的原因在于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>`

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接