2010-01-10 30 views

回答

1

我的猜測是有一個commandmanager註冊的命令實例。命令可以從許多不同的來源執行,而不僅僅是用戶界面,例如快捷鍵。

嘗試調用CommandManager.InvalidateRequerySuggested();並在canexecute方法中添加一個斷點以確認情況如此。

希望這會有所幫助。

1

IMO,CommandBindings在WPF中實現得很差。如果它有一個CommandBinding,即使在控件關閉的情況下,你也必須解決這個事實,即系統保留一個WeakReference給你的控件。

您將在網上看到很多關於如何在XAML代碼中設置CommandBinding的示例。問題是所有這些例子都會將性能問題引入到任何粘貼的應用程序中。 CommandBindings從不自行消失。至少,不是很長時間。

的解決方案是:

A)不要在XAML設立化CommandBindings。你必須使用後面的代碼。在調用InitializeComponent()之後,建議使用構造函數。使用this.CommandBindings.Add()將代碼添加到CommandBindings中。 B)處理Window或Control的Closed()事件並調用this.CommandBindings.Clear()。

這是我一直能夠可靠地獲得CommandBindings退出射擊的唯一途徑。我認爲這是微軟實施該功能的一種荒謬的方式。事實上,很多在線示例教你在XAML中聲明CommandBindings只會加劇問題。

+0

這意味着您不應該在用戶控件上聲明一個命令綁定(因爲您沒有關閉的事件),這可能會導致內存問題。 – 2010-07-13 23:17:59