2012-11-22 87 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>`