Если вам просто нужно показать сообщение, вы должны переместить метод ShowMessage()
в модель представления и использовать службу сообщений для этого из класса модели представления.
Если вы действительно хотите вызватьнекоторый метод, который имеет смысл определять только в представлении, это можно сделать, реализовав интерфейс в представлении и внедрив модель представления с этим интерфейсом.Например, когда вы вызываете команду:
public interface IView
{
void ShowMessage();
}
public partial class Control1 : UserControl, IView
{
public Control1()
{
InitializeComponent();
}
public void ShowMessage()
{
MessageBox.Show("Called from other control!");
}
}
Модель представления:
public ICommand ShowMessageCommand
{
get
{
return m_showMessageCommand ?? (m_showMessageCommand = new RelayCommand(
p => true,
p =>
{
IView view as IView;
if (view != null)
{
//...
view.ShowMessage();
}
}));
}
}
Модель представления ничего не знает о представлении, она знает только об интерфейсечто, конечно, можно назвать чем-то иным, чем IView
.
Другой вариант заключается в использовании агрегатора событий или мессенджера для отправки события или сообщения из модели представления в представление в сильно связанном виде.,Пожалуйста, обратитесь к этому сообщению в блоге для получения дополнительной информации об этом.
Ни один из подходов не нарушает шаблон MVVM.