2017-08-07 113 views
0

是否可以使用元素綁定和DataGridComboBoxColumns選定項目?DataGridComboBoxColumn上的元素綁定

我有一些對象MyObject,它包含ObservableCollection類型的屬性「ListOfSomeTypes」。 SomeType實現INotifyPropertyChanged。

SomeType的列表應顯示在DataGrid中。對於「ListOfSomeTypes」我正在尋找解決方案來執行以下操作:DataGrid有兩列。一個是具有固定列表整數的DataGridComboBoxColumn,例如{0,1,2,3}。該列的ItemsSource通過綁定(屬性「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; 
} 

感謝您的幫助!

回答

0

是否可以使用元素綁定與DataGridComboBoxColumns選定的項目?

簡短的回答:第

DataGridCheckBox列有不知道 「dgcbcSelectedIndex」 是。 A DataGridComboBoxColumn不是被添加到可視化樹中的可視元素。這是一種最終創建ComboBox元素的類型,所以這不起作用。

您應該做的是將ComboBox的選定項目/索引/值綁定到數據對象的源屬性,然後將CheckBox綁定到相同的源屬性。您不能使用ElementName

+0

所以,你的意思是我必須在我的「MyObject」類中有某種「SelectedIndex」屬性? – tabina

+0

是的,確切地說。 ... – mm8

相關問題