2016-10-14 10 views
0

WPFページのLoadedイベント内のボタンをバインドするのがうまくいかず、別のページに移動して戻った後にのみ動作するのでしょうか。MVVMLightフレームワークを使用したLoadedイベントでICommandがバインドされていません

私はインベントリアプリを持っています。メインページには、特定のリストに戻る[戻る]ボタンがあるため、ほとんどのViewModelが呼び出されます。その原因は、そのコマンドが他のページのコレクションも読み込まれます。

私はロードされたページイベントを使用して、リストを作成し、この特定のページのバインドコマンドを開始するのに必要なメソッドを呼び出しました。私はまたいくつかのCRUDイベントへの購読解除のようなクリーンアップのためにアンロードされたページイベントを使用しました。

しかし、今問題は、ロードされたページイベントでボタンがバインドされないことです。私は理由を知らない。

私は問題をデモするための小型アプリを作った。あなたのビューがCommand_ShowAddWindowCommand_ClickMeの変更について通知取得されていないので、これは、ここで (完全なソースコードが含まれています) https://www.dropbox.com/s/qzumzyicuvrktsi/ICommandTest.zip?dl=0 enter image description here

答えて

1

ダウンロードすることができます。私に説明してみましょう:

あなたPageコンストラクタはまず、あなたのコマンドにバインドを実行すると初期化され、転送ビューに、しかし、その時点で、あなたのコマンドはnullなので、ビューはnullに両方のボタンのコマンドをバインドされています。

Loadedイベントが発生すると、コマンドは初期化されますが、ビューは通知を受け取らないため、コマンドバインディングはnullに保持されます。

問題への解決策は次のとおりです。

手動コマンドについての見解を通知するRaisePropertyChangedを呼び出して、あなたがそれらを初期化するときに変更します。

void InitCommands() 
{ 
    Command_ShowAddWindow = new RelayCommand(Command_ShowAddWindow_Click); 
    Command_ClickMe = new RelayCommand(Command_ClickMe_Click); 
    RaisePropertyChanged("Command_ShowAddWindow"); 
    RaisePropertyChanged("Command_ClickMe"); 
} 

それとも、前に、あなたのViewModelコンストラクタであなたのコマンドを初期化しますデータバインディングが初期化される:

public ViewModel_Page1() 
{ 
    InitCommands(); 
    ... 
} 
関連する問題