2017-08-07 9 views
0

DataGridComboBoxColumnsで選択した項目で要素バインディングを使用することはできますか?DataGridComboBoxColumnの要素バインド

ObservableCollection型のプロパティ "ListOfSomeTypes"を含むMyObjectオブジェクトがいくつかあります。 SomeTypeはINotifyPropertyChangedを実装します。

SomeTypeのリストをDataGridに表示する必要があります。 "ListOfSomeTypes"の場合、私は次のことを行うためのソリューションを探しています:DataGridには2つのカラムがあります。 1つは固定された整数のリストを持つDataGridComboBoxColumnです。 {0,1,2,3}。その列のItemsSourceは、Binding(MyObjectの一部ではないプロパティ "ListOfIndices")を介して設定されます。 2番目の列は、(別の列の)選択したインデックス位置に "ListOfSomeTypes"の内容を表示する必要があります。 だから私は、両方の値をチェックし、表示するための正しい値を選択するのに、マルチコンバータを使うことができると思った。問題は、コンボボックスが私のインデックスリストの最初の項目を表示するにもかかわらず、インデックスであると思われる値が決して設定されない(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" は何であるかわかりません。 DataGridComboBoxColumnは、ビジュアルツリーに追加されるビジュアルエレメントではありません。これは最終的にComboBox要素を作成する型ですので、これは機能しません。

ComboBoxの選択項目/インデックス/値をデータオブジェクトのソースプロパティにバインドし、同じソースプロパティにCheckBoxをバインドする必要があります。 ElementNameは使用できません。

+0

"MyObject"クラスに何らかの "SelectedIndex"プロパティを持たなければならないということですか? – tabina

+0

はい、正確です。 ... – mm8

関連する問題