[英]Wpf UI does not update
我有一個wpf mvvm應用程序。 視圖中有一個按鈕,該按鈕綁定到視圖模型中的命令。 此命令的CanExecute函數返回某些bool屬性的值
private bool Command1CanExecute()
{
return IsConnected;
}
更改屬性后,該按鈕應被禁用,但是直到我單擊UI中的某個位置時,按鈕才會禁用。 我考慮過的解決方案(它可以工作:))是運行
CommandManager.InvalidateRequerySuggested();
每秒(分派器計時器可以做到)。
對於我的問題,還有其他更優雅的解決方案嗎? 謝謝。
馬特維。
任何用戶交互后,所有命令都會更新。 如果您以編程方式更改屬性並想更新命令狀態,則必須在屬性更改后建議重新查詢:
CommandManager.InvalidateRequerySuggested();
您還可以引發命令的CanExecuteChanged-Event(僅執行上述操作)
Command1.RaiseCanExecuteChanged();
您可以將以下任何內容插入IsConnected
的設置器中,如下所示
private bool _isConnected;
public bool IsConnected
{
get { return _isConnected; }
set
{
if (_isConnected != value)
{
_isConnected = value;
RaisePropertyChanged(); //or something similar
Command1.RaiseCanExecuteChanged();
}
}
}
如果您不希望這樣做,則可以在CanExecute-Handler中返回true
並將按鈕的IsEnabled
綁定到屬性本身。
<Button IsEnabled="{Binding IsConnected}" Command="{Binding Command1}" ... />
對於使用MicroMvvm的用戶,需要將更改應用於以下類: public class RelayCommand<T>:ICommand
和方法:
[DebuggerStepThrough]
public Boolean CanExecute(Object parameter)
{
var valu = _canExecute == null ? true : _canExecute();
CommandManager.InvalidateRequerySuggested();
return valu;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.