2011-02-10 12 views
1

私はM-V-VMパターンを使用しています。 私は、ViewModelとDataModelのObservableCollectionを持っています。 DataModelのリストは、DataGridにデータバインドされています。DataModelからその親ViewModelへのプロパティへのバインド?

グリッドがレンダリングされるとき、フィールドの1つがComboBox(文字列名のリスト)としたいと思います。

この文字列名リストは、すべての行(DataModel)に適用される共通リストです。

グリッドのフィールドレベルの行プロパティを親ViewModelにバインドする方法はありますか?

回避したい1つの解決策は次のとおりです。 DataModelに、ViewModelのプロパティ(文字列名のリスト)を基本的に返すgetプロパティがあります。

答えて

0

あなたは静的リソースでそれを行うことができます。 など。今、あなたのユーザーコントロールでこのリソースを参照することができ、XAMLで

<UserControl.Resources> 
    <mynamespace:MyViewModel x:Key="MyViewModel" /> 
</UserControl.Resources> 

をあなたの静的リソースを定義します。

<Controls::DataGrid DataContext="{StaticResource MyViewModel}" ItemSource="{Binding MyItems}" ... 
    <Controls:DataGridTemplateColumn.CellTemplate> 
    <DataTemplate> 
     <ComboBox ItemsSource="{Binding MyItems, Source={StaticResource MyViewModel}" DisplayMemberPath="MyString" /> <!-- This does the job with the combo box and the strings --> 
    </DataTemplate> 
    </Controls:DataGridTemplateColumn.CellTemplate> 
</Controls:DataGrid> 

希望これは、

を助けBR、

TJ

+0

ので、私はバインディングプロパティは、全体のDataContextツリー(親ビューモードに子モデルを横断しないと思います現在のDataContextでプロパティを見つけることができない場合は?私はこれを試してみましょう! – AlvinfromDiaspar

+0

staticresource refをviewmodelに追加すると、私のviewmodelが2回作成されています。問題は、ビューのコンストラクタでviewmodelを作成していることです(xamlで定義するのではなく)。 – AlvinfromDiaspar

+0

はい、が解析されるとすぐに、オブジェクトが作成されます。ここにはいくつかの機会があります。これをシングルトンにして起動時にアプリケーションリソースに追加するApplication.Current.Resources.Add( "MyViewModel"、MyViewModel.Instance);)、またはアプリケーションリソース((MyViewModel)Applicationを介して作成したオブジェクトを参照します。 Current.Resources ["MyViewModel"];) これはあなたを助けますか? – TerenceJackson

関連する問題