gpt4 book ai didi

c# - 如何使用Delegatecommand.ObservesProperty观察多个属性

转载 作者:行者123 更新时间:2023-12-03 10:43:03 25 4
gpt4 key购买 nike

我想在我的 View 模型中观察多个属性,以检查CanExecute方法。

问题:

如何注册更多属性(property)?

示例:

class MyViewModel
{
public int myproperty1 { get; set; }
public int myproperty2 { get; set; }

public DelegateCommand MyCommand { get; set; }

public MyViewModel()
{
MyCommand = new DelegateCommand(MyCommandMethod,CanExecuteMyCommandMethod);
MyCommand.ObservesProperty((() => myproperty1));
// line below doesnt work Exeception "Value is already observed". How to register more properties to observe?
MyCommand.ObservesProperty((() => myproperty2));

}

private bool CanExecuteMyCommandMethod()
{
throw new NotImplementedException();
}

private void MyCommandMethod()
{
throw new NotImplementedException();
}
}

更新:

PropertChanged事件由Propertchanged.Fody INPC完成。

ObservesProperty是RaiseCanExecuteChanged。
观察注册的第二个属性引发异常“已经观察到值”。

附加问题:
ObservesProperty(((()=> myproperty;

允许多个或单个属性?
如果其他人确认可以进行多次注册?

最佳答案

像您正在做的那样为另一个属性调用ObservesProperty方法应该可以。但是您需要在源属性的设置程序中引发PropertyChanged事件,以引发CanExecuteChanged事件。

请引用以下示例代码。

public class MyViewModel : BindableBase
{
private int _myproperty1;
public int myproperty1
{
get { return _myproperty1; }
set { _myproperty1 = value; RaisePropertyChanged(); }
}

private int _myproperty2;
public int myproperty2
{
get { return _myproperty2; }
set { _myproperty2 = value; RaisePropertyChanged(); }
}

public DelegateCommand MyCommand { get; set; }

public MyViewModel()
{
MyCommand = new DelegateCommand(MyCommandMethod, CanExecuteMyCommandMethod);
MyCommand.ObservesProperty((() => myproperty1));
MyCommand.ObservesProperty((() => myproperty2));
}

private bool CanExecuteMyCommandMethod()
{
return true;
}

private void MyCommandMethod()
{

}
}

关于c# - 如何使用Delegatecommand.ObservesProperty观察多个属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45049548/

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