2010-08-15 85 views
3

我正在使用ICommand接口在我的應用程序中的幾個按鈕上執行綁定,即運行和關閉按鈕。我使用的是在this問題提到一個輔助方法給ICommand的掛鉤到一個委託如下:如何手動刷新WPF中的窗口?

_someCommand = new DelegateCommand(this.DoSomething, this.CanDoSomething); 

private ICommand _someCommand; 

public ICommand SomeCommand 
{ 
    get { return _someCommand; } 
} 

private void DoSomething(object state) 
{ 
    // do something here 
} 

private bool CanDoSomething(object state) 
{ 
    // return true/false here is enabled/disable button 
} 

這似乎工作得很好,因爲在我的實現,CanDoSomething返回一個屬性的值我在我的應用程序中。

如果我將屬性的初始值設置爲true,那麼該按鈕將被啓用,並且false將被禁用。

我有一系列事件從應用程序層中的BackgroundWorker回到ViewModel,根據應用程序的當前狀態將屬性的值更改爲true或false。

我現在遇到的問題是,當我在工作完成後將該值設置爲true時,該按鈕不是「重新啓用」的。如果我點擊窗口內的某個地方,它會更新。因此,我認爲,手動刷新窗口將會解決我的問題,至少在過渡期間是這樣。這樣做感覺有點嚴重,但對於我可以嘗試的其他東西我感到不知所措。

如果有人有任何建議,我全都聽。

感謝您的幫助!

伊恩

編輯 -於應用本身更

一點點信息。它在應用程序線程中使用後臺工作來處理「工作」。該應用程序是一個簡單的實用程序,用於管理表的創建和將數據加載到表中。我們使用了很多預定義的SQL腳本來設置我們的測試環境,所以這是一個簡單的實用程序,它允許我們根據用戶在UI中提供的參數來完成這樣的事情。

希望有幫助,因爲當我重新閱讀我的問題時,它就像在UI線程中做所有事情一樣,事實並非如此。進度報告提高到UI線程和一切都按預期更新,除了按鈕..

回答

4

CommandManager.InvalidateRequerySuggested()可能是答案 - 它會告訴所有的命令來檢查它們是否啓用。

+0

完美 - 由於我只使用了兩個命令,並且都需要更新,所以這個功能完美無缺。 – 2010-08-15 22:14:41