none
Закрыть окно из UserControl MVVM

    Общие обсуждения

  • Здравствуйте!

    Вот тут нашел интересное и красивое решение, как закрыть окно из ViewModel используя интерфейс IClosable. Как можно применить это решение для закрытия окна из UserControl? Перефразируя как передать в UserControl ссылку на родительское окно?

    Спасибо!


    Артемий Соболев

    19 марта 2017 г. 8:52

Все ответы

  • Здравствуйте,

    Что удалось найти по использованию IClosable:

    Альтернативно можно постмореть в сторону:


    Если Вам помог чей-либо ответ, пожалуйста, не забывайте жать на кнопку "Предложить как ответ" или "Проголосовать за полезное сообщение" Мнения, высказанные здесь, являются отражение моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.

    20 марта 2017 г. 8:23
    Модератор
  • Добрый день.

    Прекращение взаимодействия с пользователем, это все-таки прерогатива ViewModel. Если вам нужно закрыть окно и для этого в VM есть команда, то просто биндитесь к ней из контрола. Если команды нет, а окно закрыть надо, то как вариант можно от контрола пройти вверх по визуальному дереву до окна и вызвать на нем Close.

    21 марта 2017 г. 5:49
    Отвечающий
  • Я так и сделал. По ссылке, которую я привёл, и первая ссылка, приведённая Максимом, указано, что в качестве параметра в команду передаётся ссылка на окно. Но если я к окну прикручиваю UserControl, в котором есть кнопка для закрытия окна, то вот как теперь передать ссылку на окно в этот контрол, который в свою очередь передаст эту ссылку ViewModel, которая и даст команду на закрытие.

    Сегодня копал по этой теме, и пришло понимание, что мне поможет RelativeSource. Теперь надо разобраться, как именно его использовать.


    Артемий Соболев

    21 марта 2017 г. 13:15
  • С RelativeSource могут возникнуть проблемы при использовании DataTemplate. Там разрывы в визуальном дереве образуются. Лучше в коде вверх бежать, причем проверять не только Parent, но и TemplateParent.
    22 марта 2017 г. 6:27
    Отвечающий
  • В моём текущем проекте данная проблема не актуальна. Но в дальнейшем буду иметь в виду.

    Спасибо


    Артемий Соболев

    26 марта 2017 г. 5:36