Я до сих пор не уверен, что мой подход правильный, но, пытаясь реализовать шаблон MVVM, я создал класс модели 'Test' следующим образом:
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); }
}
...
И в коде XAML View
я связываю все свойства класса Test
через свойство TestVM
.Хотя это работает нормально, я столкнулся с проблемой при попытке реализовать DelegateCommad
.
public DelegateCommand StartTestCommand { get; private set; }
До сих пор, при реализации DelegateCommand
s, если я хочу вызвать метод CanExecute
, когдасвойство изменилось, я включаю DelegateCommand.RaiseCanExecuteChanged()
внутри установщика свойства.Например:
...
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
изменяется, вызывается установщик, но вместо этого модель обновляется напрямую.
Что я делаю не так?Какой правильный подход при использовании объекта Model
в ViewModel
?