Josh Smith's CommandSink exampleをゼロから再構築しました。私のコマンドボタンが灰色表示されているを除いて、エラーなしでが実行されます。これは、コマンドがCanExecute = true
に設定されたり、ある時点でCanExecute = false
に設定されないように、正しく設定されていない場所があるためと考えられます。MVVMでデータバインディングの問題をデバッグするにはどうすればよいですか?
しかし、データバインディングは本質的にXAMLで行われているので、「コマンドにブレークポイントを設定する」とはっきりしないため、ボタンが割り当てられたときにCanExecute = falseまたはCanExecute = true
が割り当てられていません。
基本的に私はビューでこれらのコマンドバインディングを持っている:
<UserControl.CommandBindings>
<sink:CommandSinkBinding Command="vm:CustomerViewModel.CloseCommand"/>
<sink:CommandSinkBinding Command="vm:CustomerViewModel.ShowInformationCommand"/>
</UserControl.CommandBindings>
と私のCustomerViewModelにコマンドは次のように定義されています。今
public static readonly RoutedCommand CloseCommand = new RoutedCommand();
public bool CanBeClosed
{
get { return _customer.IsOpen; }
}
public void Close()
{
_customer.IsOpen = false;
this.OnPropertyChanged("CanBeClosed");
this.OnPropertyChanged("CanBeApproved");
}
しかし、MVVMの私の理解以来、あなたがいることですあなたのM-VM-Mをセットアップし、あなたのアプリケーションと物事を「データを束縛して仕事をしてください」を実行してください。
は、私がここで私のコマンドがCanExecute = true
をしているとき、彼らはCanExecute = false
をしている時に見つけるためにステップスルーするASP.NETのように「ページサイクル」のようなものを探していますね。
データバインディングがコード内で明示的に行われていないWPF/MVVMパターンをデバッグするにはどうすればよいでしょうか?したがって、従来の意味でのステップスルーデバッグはできません。
回答:
this article that Gishu mentionedはデータバインディングの問題をデバッグするに取り掛かる、そして一般的にちょうどそれを行う方法についての私の質問に答えにする方法については、一般的に有用であったが、それは私の特定のケースで私を助けていません。何が価値があるために
は、私はジョシュ・スミスの元のコードと行あたりのラインの比較を行うことによって、このコードで私の特定の問題を考え出しとCommandSinkBinding.OnCommandSinkChanged
方法から欠落していた次の2行が見つかりました: if (!ConfigureDelayedProcessing(depObj, commandSink))
ProcessCommandSinkChanged(depObj, commandSink);
を
これは重複していますか(少なくとも回答の点で)ですか? [http://stackoverflow.com/questions/337023/how-to-detect-broken-wpf-data-binding](http://stackoverflow.com/questions/337023/how-to-detect-broken- wpf-data-binding)あなたはBea Stollnitzの記事をgoogleでも見ることができます。 – Gishu
答えの部分のリンクは今死んでいます:( –