Wpf UI does not update
本文关键字:update not does UI Wpf | 更新日期: 2023-09-27 18:27:25
我有一个wpf-mvvm应用程序。视图中有一个按钮,它绑定到视图模型中的一个命令。此命令的函数CanExecute返回一些布尔属性的值
private bool Command1CanExecute()
{
return IsConnected;
}
当属性被更改时,按钮应该会被禁用,但直到我单击UI中的某个位置才发生这种情况。我考虑过的解决方案(有效:)是运行
CommandManager.InvalidateRequerySuggested();
每秒(Dispatcher计时器可以做到)。
对于我的问题,还有其他更优雅的解决方案吗?非常感谢。
马特维。
所有命令都会在任何用户交互后更新。如果您以编程方式更改属性并希望更新命令状态,则必须在属性更改后建议重新查询:
CommandManager.InvalidateRequerySuggested();
您还可以引发您的命令的CanExecuteChanged事件(它只做上面的事情)
Command1.RaiseCanExecuteChanged();
你可以在IsConnected
的setter中插入任何一个,就像下面的一样
private bool _isConnected;
public bool IsConnected
{
get { return _isConnected; }
set
{
if (_isConnected != value)
{
_isConnected = value;
RaisePropertyChanged(); //or something similar
Command1.RaiseCanExecuteChanged();
}
}
}
如果你不想那样,您可以在CanExecute处理程序中返回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;
}