我仍然不确定我的方法是否正确,但为了尝试实现 MVVM 模式,我通过以下方式创建了一个模型类“测试”:
public class Test : BindableBase
{
private int testNumber;
public int TestNumber
{
get { return testNumber; }
set { SetProperty(ref testNumber, value) }
}
...
}
然后我在我的ViewModel:
class ViewModel : BindableBase
{
private Test testVM;
public Test TestVM
{
get { return testVM; }
set { SetProperty(ref testVM, value); }
}
...
并且在View我的XAML代码中通过属性绑定了Test类的所有TestVM属性。虽然这很好用,但我在尝试实现DelegateCommad.
public DelegateCommand StartTestCommand { get; private set; }
到目前为止,在实现DelegateCommands 时,如果我想CanExecute在属性发生更改时触发该方法,我将包含DelegateCommand.RaiseCanExecuteChanged()在属性的 setter 中。像这样:
...
private bool duringTest;
public bool DuringTest
{
get { return duringTest; }
set
{
SetProperty(ref duringTest, value);
StartTestCommand.RaiseCanExecuteChanged();
}
}
...
这对于在 中声明的属性很好ViewModel,但是当对Test属性使用相同的方法时,这不再有效。
...
private Test testVM;
public Test TestVM
{
get { return testVM; }
set
{
SetProperty(ref testVM, value);
StartTestCommand.RaiseCanExecuteChanged();
}
}
}
我希望每次TestVM更改属性时,都会调用 setter,而是直接更新模型。
我究竟做错了什么?在中使用Model对象时正确的方法是ViewModel什么?