2012-11-22 3 views
4

У меня есть следующий DataGridTemplate столбец:WPF MultiBinding .Net Framework 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> 

То, что я пытаюсь сделать, это есть столбец Наримера внутри DataGrid, и каждые выпадающие есть несколько флажков. Каждая строка данных представляет собой больницы. В поле со списком указывается, какие специальности есть в больнице, и пользователь должен также иметь возможность изменять эти параметры.

Это код преобразователя:

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

Какое сообщение вы получили при аварии? –

ответ

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>` 
Смежные вопросы