2012-03-26 4 views
1

ViewModelのフィールドにバインドされたビューのコントロールに依存プロパティがあります。ユーザーがメニュー項目をクリックすると、コントロールがそのプロパティの値を更新してViewModelがXMLファイルに保存できるようにします。 ViewModelのリクエストでViewがそのプロパティを更新するようにする正しいメカニズムは何ですか?ViewModelはWPF/MVVMのビューでどのように更新を要求できますか?

答えて

0

あなたのオブジェクトは、INotifyPropertyChangedインタフェースを実装する必要がありますし、あなたの特性はそうプロパティに対して行われたすべての変更は、結合メカニズムを介して表示するカスケード接続されます。この

private string _property; 
public string Property 
{ 
    get { return _property; } 
    set 
    { 
    if(_property == value) return; 
    _property = value; 
    RaisePropertyChanged("Property"); 
    } 
} 

のようになります。

メニューアイテムのコマンドプロパティは、ビューモデルで宣言されたコマンドにバインドされ、ビューモデルでメソッドをトリガしてプロパティ値を設定します。変更は、ビューにカスケード接続されます。

menuItem.Click - > menuItem.Command.Execute - > viewModel.method - >ビューモデルプロパティを変更 - >プロパティ変更イベントを発生させる - > [ビューのプロパティが結合

を介して変更しました
+1

私はOPが反対を求めていると思います。 View-> ViewModelではなくViewModel-> View – GazTheDestroyer

+0

GazTheDestroyerは正しいです。 – Beth

+0

私は私の答えを編集しました、私はあなたがそれを行う方法を説明を追加しました。 –

1

一般に、MVVMコントロールでは、編集時にすぐにバインドされたプロパティ(フィールドではない)が更新されます。 ViewModelは「状態」であり、ビューはその状態を見る単なる方法です。

あなたがコントロールを編集するときは常にViewModelを更新する必要があります。 ViewModelは、メニューコマンドが呼び出されたときにXMLに保存することができます。

+0

あなたの答えをありがとう。問題は、ビューのデータを取得するにはメソッド呼び出しが必要だということです。このメソッドは、データが必要でない限り通常は呼び出されません。ビューが変更されると、データは自動的に更新されません。 – Beth

+0

正確なシーケンスが何であるかについてはまだ少し不明です。データを取得するのはViewModelです。ビューがある時点でデータ検索をトリガする必要がある場合は、ViewModelでコマンドを公開し、ビュー(OPのメニュー)から呼び出します。 – GazTheDestroyer

+0

ViewModelはビューをトリガしてデータを取得する必要があります。ビューには、メニューアイテムがクリックされてViewModelに返されたときに、コントロール自体のメソッド呼び出しでキャプチャする必要がある状態があります。 – Beth

0

TextBoxに書き込んだ直後にメニューアイテムをクリックしたときにviewmodelが更新されないという問題がありました。パラメータUpdateSourceTrigger =のPropertyChangedで

は、それがテキストボックスのために働い:

<TextBox Grid.Column="5" Grid.Row="7" Text="{Binding SelectedPerson.Room, UpdateSourceTrigger=PropertyChanged}"></TextBox> 

しかし残念ながらないDatePickersのための...

奇妙なことである代わりに、メニュー項目のボタンをクリックすると、 DatePickerはviewmodelを更新しています。 私はバグ修正のための時間がありませんので、私はmenuitemをボタンに変更します。


編集:問題はmenuitemではなく、メニュー自体です。私はメニューからmenuitemsを移動すると、それは動作します。

関連する問題