Привязка элемента к DataGridComboBoxColumn

Можно ли использовать связывание элементов с выбранным элементом DataGridComboBoxColumns?

У меня есть некоторый объект MyObject, который содержит свойство "ListOfSomeTypes" типа ObservableCollection. SomeType реализует INotifyPropertyChanged.

Список SomeType должен отображаться в DataGrid. Для "ListOfSomeTypes" я ищу решение, чтобы сделать следующее: DataGrid имеет два столбца. Одним из них является DataGridComboBoxColumn с фиксированным списком целых чисел, например, {0,1,2,3}. ItemsSource этого столбца устанавливается через Binding (свойство ListOfIndices, которое не является частью MyObject). Во втором столбце должно отображаться содержимое "ListOfSomeTypes" в выбранной позиции индекса (из другого столбца). Поэтому я подумал, что мог бы просто использовать MultiConverter, чтобы проверить значения обоих и выбрать правильное значение для отображения. Проблема в том, что значение, которое должно быть индексом, никогда не устанавливается (ноль), хотя в выпадающем списке отображается первый элемент моего списка индексов.

Поскольку индексы запрашиваются только для отображения, я не хочу иметь свойство "SelectedIndex" в моем классе MyObject. Можно ли получить доступ к выбранному значению комбинированного списка с привязкой элемента? Какое свойство нужно использовать (поскольку SelectedValueBinding кажется неправильным)? Или есть лучший способ?

Это мой код:

<DataGridCheckBoxColumn Header="SomeType">
   <DataGridCheckBoxColumn.Binding>
       <MultiBinding Converter="converters:SomeTypeCodeToBoolMultiConverter}">
         <Binding Path="ListOfSomeTypes" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged"/>
         <Binding ElementName="dgcbcSelectedIndex" Path="SelectedValueBinding" 
                         UpdateSourceTrigger="PropertyChanged"/>
       </MultiBinding>
   </DataGridCheckBoxColumn.Binding>
</DataGridCheckBoxColumn>
<DataGridComboBoxColumn x:Name="dgcbcSelectedIndex" Header="Indices">
   <DataGridComboBoxColumn.ElementStyle>
      <Style TargetType="ComboBox">
         <Setter Property="ItemsSource" Value="{Binding Path=Data.ListOfIndices, Source={StaticResource proxy}, UpdateSourceTrigger=PropertyChanged}" />
         <Setter Property="IsSynchronizedWithCurrentItem" Value="True"/> 
      </Style>
   </DataGridComboBoxColumn.ElementStyle>
   <DataGridComboBoxColumn.EditingElementStyle>
      <Style TargetType="ComboBox">
         <Setter Property="ItemsSource" Value="{Binding Path=Data.ListOfIndices, Source={StaticResource proxy}, UpdateSourceTrigger=PropertyChanged}" />
      </Style>
   </DataGridComboBoxColumn.EditingElementStyle>
 </DataGridComboBoxColumn>

Конвертер

public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
  if (values == null || values.Length != 2)
    return null;

  var listOfSomeTypes= (ObservableCollection<SomeType>) values[0];
  if (listOfSomeTypes!= null)
  {
    int selectedIndex = 0;
    if (values[1] != null)
    {
      try { selectedIndex = (int)values[1];  }
      catch (Exception)  { }
    }

    if (listOfSomeTypes.Count > selectedIndex )
    {
      var someType= listOfSomeTypes[selectedIndex ];
      return someType == TypeA;
    }        
  }
  return null;
}

Спасибо за вашу помощь!

1 ответ

Можно ли использовать связывание элементов с выбранным элементом DataGridComboBoxColumns?

Краткий ответ: Нет.

DataGridCheckBox Столбец не знает, что такое "dgcbcSelectedIndex". DataGridComboBoxColumn не является визуальным элементом, который добавляется в визуальное дерево. Это тип, который в конечном итоге создает ComboBox элемент, так что это не сработает.

Что вы должны сделать, это связать выбранный элемент / индекс / значение ComboBox к свойству источника вашего объекта данных, а затем привязать CheckBox к тому же исходному свойству. Вы не можете использовать ElementName,

Другие вопросы по тегам