繁体   English   中英

WPF UI无法更新

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM