Привязать представления DialogResult к свойству ViewModels? - PullRequest
1 голос
/ 20 июня 2011

Я относительно новичок в WPF, XAML и привязках данных. У меня есть вид (Окно) и вид-модель.

Я попытался реализовать шаблон MVVM, который означает, что ни представление, ни модель представления не содержат ссылки друг на друга. Весь обмен данными происходит через привязки данных.

Пока все хорошо, но теперь я столкнулся с проблемой, для которой не могу найти решение.

На мой взгляд, у меня есть кнопка Пуск, которая связана с командой.

<Button Command="{Binding NextCommand}" Content="Next">

NextCommand имеет тип ActionCommand : ICommand

В моем случае NextCommand просто вызывает закрытый метод внутри модели представления.

Проблема, которую я пока не могу найти, заключается в следующем:

Как закрыть окно в конце метода просмотра моделей NextCommandAction?

private void NextCommandAction(object o)
{
    ...
    ...
    // close the window
}

Так как у меня нет ссылки на представление, я не могу просто установить DialogResult = true;

Единственное работающее решение, которое я нашел до сих пор, это добавить скрытую радиокнопку в представление и привязать ее значение к свойству CloseView и создать метод CloseView в файле xaml.cs, который связан с событием Checked скрытая радио-кнопка. В этом методе я установил DialogResult = true;

Хотя это работает, я чувствую, что должно быть лучшее решение, чем добавление скрытых элементов к вашему виду!

Заранее спасибо за помощь!

PS: мне мой вопрос понятен. Если что-то неясно, не стесняйтесь спрашивать.

Ответы [ 2 ]

1 голос
/ 06 октября 2014

Вы можете передать ссылку на окно как CommandParameter команде Close и сделать все, что требуется с окном.

<Button Content="Close" Command="{Binding Path=CloseCommand}" 
  CommandParameter="{Binding ElementName=Window}"/>

private void CloseCommand(object sender)
{
    Window wnd = sender as Window;
    wnd.Close();
}
0 голосов
/ 31 октября 2016

CommandParameter = "{Binding ElementName = Window}" предполагает, что в вашем XAML есть элемент с именем "Window".например, ваш тег Window должен иметь имя Name = "Window" '

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...