如何在 DelegateCommand 中重新评估 CanExecute

问题描述 投票:0回答:1

我在 sqlserver 中有一个表,其中包含一些行。我在 wpf 和一些文本框中有一个 prism MVVM 项目,其中每个文本框的文本都绑定到我的表的属性。例如在视图中:

Text="{Binding UserModel.Fname, UpdateSourceTrigger=PropertyChanged,ValidatesOnDataErrors=True, Mode=TwoWay}"

和一个带有命令的按钮:

 Command="{Binding Add_EditUserInfo}"

在 Viewmodel 中,我的表有一个属性:

    private TblUserInfo _userModel = new TblUserInfo();
    public TblUserInfo UserModel
    {
        get { return _userModel; }
        set
        { 
            SetProperty(ref _userModel, value);
            Add_EditUserInfo.RaiseCanExecuteChanged();
        }
    }

按钮:

 public DelegateCommand Add_EditUserInfo { get; set; }

。 。 。 并在构造函数中:

  Add_EditUserInfo = new DelegateCommand(OnAdd_EditUserInfo,    CanAdd_EditUserInfo).ObservesProperty(() => UserModel);

对于可以执行:

        private bool CanAdd_EditUserInfo()
       {
          return UserModel.TblUserInfo_IsValid;
       }

现在,我的问题: 当我在文本框中写入一些内容时,canExecute 命令未触发。 为什么?

mvvm prism canexecute
1个回答
0
投票

您的

UserModel
属性不会改变,因此没有
RaiseCanExecuteChanged

您必须在

Fname
的 setter 内部执行此操作,或者将处理程序附加到
_userModel.PropertyChanged
并从那里调用
Add_EditUserInfo.RaiseCanExecuteChanged

选择处理程序选项时,请注意对象的生命周期,因为可能会导致内存泄漏。

© www.soinside.com 2019 - 2024. All rights reserved.