2

次のように定義されたビューモデルにバインドされたユーザーコントロールがあるとします。

class MyViewModel
{
    public DataView MyView { get; set; }
    public DataView MyTypes { get; set; }
}

XAMLは大まかに次のようにマークされています

<Grid>
    <dxg:GridControl AutoPopulateColumns="True" Name="gridControl1" ItemsSource="{ Binding MyView}">
        <dxg:GridControl.Columns>
            <dxg:GridColumn FieldName="col1">
                <dxg:GridColumn.EditTemplate>
                    <ControlTemplate>
                        <dxe:ComboBoxEdit Name="cmbTypes" 
                       ItemsSource="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl}},
                            Path=ViewModel.MyTypes}"/>
                    </ControlTemplate>
                </dxg:GridColumn.EditTemplate>
            </dxg:GridColumn>
            <dxg:GridColumn FieldName="col2"/>
            <dxg:GridColumn FieldName="col3" Width="75"/>
        </dxg:GridControl.Columns>
        <dxg:GridControl.View>
            <dxg:TableView Name="tableView1" AutoWidth="True" ShowTotalSummary="True" />
        </dxg:GridControl.View>
    </dxg:GridControl>
</Grid>

次のようにバインドされます

internal MyViewModel ViewModel
{
    get { return (MyViewModel)DataContext; }
    set { DataContext = value; }
}

もちろん、ComboBoxには、値を持つListTypesからの選択は表示されません。

質問は、グリッドがバインドされているGrid.ColumnからViewModelのListTypesプロパティを、ListTypesと同じレベルのプロパティListTypesを持たないDataViewMyItemsに参照する方法です。

どんな助けでも大歓迎です

4

1 に答える 1

1

質問を正しく理解していれば、次のことが機能することを期待しています。

{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl}},
                        Path=DataContext.MyTypes}

Path=ViewModel.MyTypesプロパティに変更通知を実装していないという理由だけで、機能していない可能性がありViewModelます。私が言うように、しかし-あなたはとうまくやっていくことができるはずですPath=DataContext.MyTypes

注:プロパティを両方として参照しているようですがMyTypesListTypes質問ではどちらがオブジェクトモデルに適しているかわかりません。

于 2012-04-29T21:30:35.547 に答える