2016-11-19 5 views
0

次の問題について助言してください。 私はWPF、Prism、およびMVVMについてはかなり新しいです。WPF Prsim MVVMアプリケーション、複数のビュー、コマンドとイベントを混乱させる

私たちは、C++のWPFポートで書かれた古いアプリケーションの汚れたスクラッチバージョンを計画し始めました。

私たちは現在、アプリケーション、メインウィンドウ、メニュー、ツールバーに(保存、追加、編集などのコマンド)を持つUI構造を持っています。プリミティブを使用してViewModelsにバインドされた異なるビューをロードしているMainRegionもあります。 AutoWire VMの機能(ナビゲーション)

ここで問題は、すべてのビューは[Save Create Edit]のツールバーコマンドを受け入れる必要があるということです。各コマンドは現在のビューでのみ実行する必要があります。

2つの問題は、今表示されます。各アクティブビューの各コマンドのCanExecuteバインディング

  1. 各ビューに保存上の異なるアクションを実行します。

我々はメインウィンドウを以下しているとしましょう:

MainWindow 
    - Menu 
    - ToolBar 
    - ContentControl (Region Manager) 

は、ユーザーがナビゲーションLESTこの瞬間設定でsettings.xaml

を言うために生じたいくつかのメニュー項目を、選択されたと言うことができますので、変更アレントツールバーのbtnを無効にする必要があります。次に、いくつかの設定を変更しています.ViewModel isDirtyプロパティが変更されました。この情報をボタンの状態に送信する方法は?

第二の問題は、Saveコマンドは、現在我々がPubSubEventsを使用している、いない設定のViewModelに、メインウィンドウのViewModel上で実行し、それぞれのViewModelは、SaveEventをサブスクライブ:

アクティブなビュー名は _eventAggregator.GetEventを経由して送信され
if (viewName.Contains("Settings")) 
     { 
      this.Settings = _settingsService.Save(); 
     } 

().Publish(ActiveView);

このようなUI実装の適切な方法を教えてもらえますか?ありがとう

+0

本当にSO形式の質問に答えることはできないと思います。一度に解決するには問題が多すぎます。 – Fang

答えて

0

あなたの高レベルのコマンドのためにCompositeCommandsを使用したいと思います。 IsActiveAwareを監視するためにcomposit ecommandを登録して登録することを確認してください。次に、それぞれのVIEWのVMはIActiveAwareインターフェイスを実装する必要があります。実装では、IsActive値が変更されたら、DelegateCommandsのIsActiveプロパティを更新します。また、VMコマンドをCompsoiteコマンドで登録してください。今はあなたが望むように正確に動作します。

+0

コンポジットコマンドとIsActiveAwareについて読んでいただき、ありがとうございます。 –

+0

私たちが必要とするものとまったく同じように見えます。再度、感謝します –

関連する問題