2017-06-02 5 views
0

は、私は以下のようなMEFの容器を使用して私の見解に自分のviewmodelを注入しています:は、MEFで表示するのviewmodelを注入 - 動作していないソースからのバインディング - WPF

[ImportingConstructor] 
    public MainView(IRepository repository, MainViewModel viewModel) 
    { 
     InitializeComponent(); 
     mMainViewModel = viewModel; 
     DataContext = viewModel; 
     viewModel.PropertyChanged += OnViewModelPropertyChanged; 
    } 

すべてが正常に動作します。ビューとビューモデルの両方にエクスポート属性があります。

問題は、値\プロパティがViewModel上で何らかの方法で更新されたときにUIに反映されないという点です。私はModeをTwo Wayに設定しようとしましたが、まだ動作しません。私はOnPropertyChangedをすべてのプロパティセッターに対して呼び出されましたが、動作しません。しかし、ビューの背後にあるコードでは、私がviewmodelにpropertychangedイベントメソッドをアタッチするとイベント通知が表示され、それを使用してビューを更新できる唯一の方法ですが、それは必要ではないはずです。私はなぜ私のビューがバインドされた要素に直接プロパティ変更された通知に応答していないのかわかりません。

私が間違っている可能性がありますか?ありがとう。

+0

なぜコンストラクタでビューに何かを注入したいのですか? MVVMを扱う際には、正当な理由はありません。あなたの基本概念が間違っている –

+0

あなたは、基本概念が意味することを間違っていることを説明してください?私はコンストラクタインジェクションかプロパティインジェクションのいずれかを行うことができます。ビューの場合は、DataContextを設定できるようにコンストラクタインジェクションを選択しました。このアプローチで何が問題になっていますか?ありがとう。 –

+0

MainViewModelをMainViewにバインドする方法をMVVMlightで見てください(これはXAML内で行われます)。また、リポジトリをViewに注入する理由は何ですか? –

答えて

0

問題が見つかりました。私の抽象ViewModelBaseクラスでは、notifypropertychangedのための関数を持っていたことがわかりました...しかし、私はメソッドを実装しましたが、クラス名にINotifyPropertyChangedはありませんでした。それを逃したはずです。別の質問が出てきます...クラスのインターフェイス定義をなぜ機能させる必要があるのですか?...まあ、今はすべて良いです。今はうまくいく。

+0

WPFバインディングはクラスにイベントPropertyChangedがあるかどうかを調べません。クラスがINotifyPropertyChanged –

関連する問題