0

是否可以将元素绑定与 DataGridComboBoxColumns 选定项一起使用?

我有一些对象 MyObject,它包含 ObservableCollection 类型的属性“ListOfSomeTypes”。SomeType 实现 INotifyPropertyChanged。

SomeType 列表应显示在 DataGrid 中。对于“ListOfSomeTypes”,我正在寻找执行以下操作的解决方案:DataGrid 有两列。一种是具有固定整数列表的 DataGridComboBoxColumn,例如 {0,1,2,3}。该列的 ItemsSource 是通过 Binding 设置的(属性“ListOfIndices”,它不是 MyObject 的一部分)。第二列应在所选索引位置(来自另一列)显示“ListOfSomeTypes”的内容。所以我想我可以使用 MultiConverter 来检查两者的值并选择正确的值进行显示。问题是,尽管组合框显示了我的索引列表的第一项,但从未设置过应该作为索引的值(null)。

由于索引只需要显示,我不想在我的 MyObject 类中有一个“SelectedIndex”属性。是否可以通过元素绑定访问组合框的选定值?需要使用哪个属性(因为 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;
}

谢谢你的帮助!

4

1 回答 1

0

是否可以将元素绑定与 DataGridComboBoxColumns 选定项一起使用?

简短的回答:没有。

DataGridCheckBox专栏不知道“dgcbcSelectedIndex”是什么。ADataGridComboBoxColumn不是添加到可视树中的可视元素。它是一种最终创建ComboBox元素的类型,因此这不起作用。

您应该做的是将 的选定项/索引/值绑定到ComboBox数据对象的源属性,然后将 绑定CheckBox到相同的源属性。你不能使用ElementName.

于 2017-08-07T12:36:39.647 回答