我都從頭開始重建Josh Smith's CommandSink example和我的版本沒有錯誤運行除了我的命令按鈕是灰色的。我想這是因爲有一些地方沒有設置正確,這樣永遠不會設置爲CanExecute = true
或在某一時刻得到的命令設置爲CanExecute = false
。但是由於數據綁定本質上是在XAML中進行的,我不確定在哪裏「設置命令斷點」,因此我可以在什麼時候看到按鈕被分配了CanExecute = false或例如未分配CanExecute = true
。如何去有關MVVM調試數據綁定的問題?
基本上我有一個觀點,這些命令綁定:
<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,運行你的應用程序,以及「獲得數據綁定和正常工作」的東西。
我想我尋找的東西像「頁面週期」在ASP.NET在其中步,找出當我的命令是CanExecute = true
,當他們CanExecute = false
。
一個人怎麼能去調試像這樣的WPF/MVVM模式在數據綁定不是在代碼完成的明確,因此人們不能在傳統意義上的分步調試通過?
答:
雖然this article that Gishu mentioned在一般關於如何去調試數據綁定的問題,一般回答我如何做到這一點的問題有幫助的,它並沒有幫助我在我的具體情況。
對於它的價值,我想我有這個代碼具體問題出做一個與約什 - 史密斯的原代碼行,每行比較,發現這兩條線路從CommandSinkBinding.OnCommandSinkChanged
方法中缺少的:
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文章中看到同樣的內容。 – Gishu 2009-04-22 15:20:22
答案部分中的鏈接現在已經死機:( – 2017-08-03 14:54:30