0

現在選択されている行の値を設定できるようにしたいと思いDataGridますComboBox

私が持っているコードはセッター部分で正常に動作していますが、選択した値をグリッド値と一致させることはできませんComboBox...マッピングが不足しているようです。

ここに私が持っているものがあります:

1- Datagrid は次のようにバインドされていObservableCollection<Object>ます:

<DataGrid ItemsSource="{Binding}" 
          SelectedItem="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}, AncestorLevel=2},
          Path=SelectedCounterparty, Mode=TwoWay}">

2-ObservableCollection<Object>コンボボックスにバインドする必要があるプロパティがあります(つまり、コンボボックスで選択されたアイテムはそのプロパティ値を取る必要があります):

public CurrenciesEnum Ccy
{
    get { return this._ccy; }
    set
    {   
        if (value != this._ccy) 
        {
            this._ccy = value;
            NotifyPropertyChanged("Ccy");
        }
    }
}

3- Combobox ソースは列挙型です:

public enum CurrenciesEnum { USD, JPY, HKD, EUR, AUD, NZD };

4- コンボボックスの現在のマッピング:

<ObjectDataProvider x:Key="Currencies" MethodName="GetNames" ObjectType="{x:Type System:Enum}">
    <ObjectDataProvider.MethodParameters>
        <x:Type TypeName="ConfigManager:CurrenciesEnum" />
    </ObjectDataProvider.MethodParameters>
</ObjectDataProvider>

<ComboBox ItemsSource="{Binding Source={StaticResource Currencies}}" SelectedItem="{Binding Ccy, Mode=TwoWay}"/>

機能: ComboBox を使用して、グリッドで現在選択されている項目の「Ccy」プロパティを設定できます。

正しくないもの: ComboBox で選択された項目は、行を変更するときにグリッドで現在選択されている項目と一致しません (また、USD または以前に選択された値にデフォルト設定されます)。つまり、適切にバインドされていないようです。これを修正する方法についてのアイデア

4

2 に答える 2

0

ObservalbeCollection<MyDataGridItem> MyDataGridItemsdatagridItemsSourceプロパティにバインドしたと仮定しましょう。

view model次のように、データグリッドのにバインドするプロパティを定義しSeletedItemます。

private MyDataGridItem SelectedDataGridRow;

public MyDataGridItem SelectedDataGridRow
{
    get
    {
        return selectedDataGridRow;
    }
    set
    {
        selectedDataGridRow= value;
        NotifyPropertyChanged("SelectedDataGridRow");
    }
}

MyColumnDataGrid 列にバインドするプロパティが(MyColumn はMyDataGridItemクラスのプロパティです)としましょう

次に、Ccy プロパティのセッター メソッドで、MyColumn プロパティを次のように設定します。

 public CurrenciesEnum Ccy
 {
    get { return this._ccy; }
    set
    { 
        if (value != this._ccy) 
        {
            this._ccy = value;

            //This is the code you need to implement

                this.MyDataGridItems
                    .Where(item=> item== this.SelectedDataGridRow)
                    .First()
                    .MyColumn = value;

            NotifyPropertyChanged("Ccy");
        }
    }
}
于 2013-04-01T05:43:20.457 に答える