是否可以使用元素綁定和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;
}
感謝您的幫助!
所以,你的意思是我必須在我的「MyObject」類中有某種「SelectedIndex」屬性? – tabina
是的,確切地說。 ... – mm8