我仍然不确定我的方法是否正确,但为了尝试实现 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; }
到目前为止,在实现DelegateCommand
s 时,如果我想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
什么?