2012-11-22 88 views
4

我有以下DataGridTemplate柱:WPF Multibinding框架4.0

<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框架4.5,而是试图只用.Net框架4.0加载时崩溃。该项目针对.Net Framework 4.0。

+3

你在碰撞时得到了什么信息? –

回答

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>`