По схеме MVVM:
- Представление знает о ViewModel - оно будет иметь ссылку на него как на конкретный экземпляр или интерфейс
- ViewModel вообще не должен знать о представлении.
Если вам нужно обработать события, я знаю, что есть два способа сделать это:
1: Предоставьте команду в вашей модели представления и используйте привязку данных для ее запуска. Это мой предпочтительный способ, например:
class MyViewModel
{
public ICommand ClickCommand { get; set; }
}
<Button Command="{Binding Path=ClickCommand}" />
Если вы сделаете это, вы можете проверить команду, просто вызвав myViewModel.ClickCommand.Execute
вручную.
2: Представьте функцию в модели представления и запишите абсолютный минимум в файле .xaml.cs
для обработки события и вызова функции, например:
class MyViewModel
{
public void HandleClick(){ }
}
<Button Click="MyClickHandler">
//.xaml.cs file
public void MyClickHandler( Object sender, EventArgs e ) {
m_viewModel.HandleClick()
}
Если вы сделаете это, вы можете проверить, просто позвонив myViewModel.HandleClick
вручную. Вам не нужно беспокоиться о модульном тестировании кода MyClickHandler
, так как это всего одна строка!