gpt4 book ai didi

c# - 当模型改变时引发 CanExecuteChanged

转载 作者:行者123 更新时间:2023-11-30 17:46:10 26 4
gpt4 key购买 nike

在我的 ViewModel 中,我有一个 ObservableCollectionPerson 对象(实现了 INotifyPropertyChanged)和一个 SelectedPerson 属性。在我看来,这些已绑定(bind)到 ListBox。

我的 ViewModel 中还有以下 Prism DelegateCommand:

Private DelegateCommand _myCommand = New DelegateCommand(CanExecute)
Public DelegateCommand MyCommand {get {return _myCommand;}}

Private Bool CanExecute()
{
Return (SelectedPerson.Age > 40);
}

每当 SelectedPerson SelectedPerson 的年龄发生变化时调用 MyCommand.RaiseCanExecuteChanged 的​​最优雅方法是什么?

SelectedPerson 的 setter 中添加和删除属性更改处理程序对我来说似乎有点困惑。

最佳答案

Adding and removing property changed handlers in the SelectedPerson's setter seems a bit messy to me.

我就是这样做的,我不确定更清洁的替代方法是什么。如果命令状态依赖于子属性,您需要以某种方式观察变化。不过,在取消订阅时要小心,否则如果您的 Person 比您的 View 模型生命周期更长,您就有内存泄漏的风险。如果您不能保证取消订阅,PropertyChangedEventManager 和弱事件处理程序可以提供帮助。

为了保持整洁,我通常只有一个处理程序来监听任何子属性更改,它调用 RequeryCommands 方法(也由 View 模型方法直接调用),该方法又调用 RaiseCanExecuteChanged 用于我认为的所有命令。

关于c# - 当模型改变时引发 CanExecuteChanged,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26556031/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com