3

わかった。これはWPFであり、ウィンドウをViewModelにバインドしようとしています。VMは次のようになります。

public class VM
{
    public SalesRecord SR {get; set;} 
    public List<string> AllSalesTypes {get; set;}
}

public class SalesRecord
{
    public int ID {get; set;} 
    public DateTime Date {get; set;}
}

これが私のXAMLです。

...
<TextBox Text="{Binding Path=ID, Mode=TwoWay}"  />
<TextBox Text="{Binding Path=Date, Mode=TwoWay}"  />
<ComboBox ItemsSource="{Binding AllSalesTypes}" Text="{Binding Path=SalesType, Mode=TwoWay}" />
...

実行時に次のようにデータコンテキストをVMオブジェクトに設定しています。

this.DataContext = _vm.SR;

これで、バインディング式は、オブジェクトのプロパティ(egおよび)TextBoxesを指すすべてのmyに対して機能しますが、すべてのSalesTypeのリストを表示する必要があるのは、明らかにクラスのメンバーであるため、機能しません。SRIDDateComboBoxAllSalesTypesVM

私の質問は次のとおりです。現在の親ではなく、現在の親を調べるバインディング式を作成する方法はありDataContextますか?

4

2 に答える 2

2

Bindingを使用してDataContextの親を取得する方法を知りません。名前付きのプロパティを持つクラスがあり、次のように記述し
た場合と同じです。AMyProperty

 object o = MyAInstance.MyProperty;

MyAInstanceのインスタンスから見つける方法はありませんo

オプションは次のいずれかを使用しています:this.DataContext = _vmおよび次のようなプロパティへのアクセス:

 <TextBox Text="{Binding SR.ID}" />

Parentまたは、プロパティをに追加SalesRecordし、VMを指すように手動で設定すると、次のように機能します。

 <TextBox Text="{Binding ID}" />
 <ComboBox ItemsSource="{Binding Parent.AllSalesTypes}" />
于 2013-02-17T13:44:41.803 に答える
0

ビューのモデル(データコンテキスト)をビューモデル(したがって名前)にして、テキストボックスのバインドを次のように変更することをお勧めします。

<TextBox Text="{Binding SR.ID}" />
<TextBox Text="{Binding SR.Date}" />

また、MVVMを使用している場合は、MVVMフレームワークを使用することを強くお勧めします。ビューモデルタイプに実際に実装する必要がありINotifyPropertyChangedます-MVVMフレームワークはこれの実装を提供します。

于 2013-02-17T13:44:28.097 に答える