Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/47: Рейтинг темы: голосов - 47, средняя оценка - 4.72
15 / 15 / 8
Регистрация: 06.06.2015
Сообщений: 99
1

Как закрыть окно через viewmodel

04.08.2016, 12:51. Показов 8579. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Использую патерн MVVM, в xaml(view) использую binding

view:
XML
1
 <Button Command="{Binding ClickCommand}">OK</Button>
в viewmodel все работает, только я теперь не знаю как закрыть view по нажатии кнопки ОК

viewmodel:
C#
1
2
3
4
 private void ClickMethod()
        {
            //тут хочу закрить окно
        }
можно аргуметом передать this?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.08.2016, 12:51
Ответы с готовыми решениями:

Как закрыть или скрыть основное окно и открыть дочернее, и как потом закрыть дочернее окно и открыть основное
Здравствуйте, передо мной возникла проблема, с которой я не могу справиться. Суть проблемы в том,...

Как из ViewModel UserControl'a изменить свойство в ViewModel главного окна?
Недавно начал попытки создавать приложение WPF с применением MVVM, и у меня возник вопрос, который...

Как закрыть окно в MVVM
Открываю новое окно вот таким способом, а вот как закрыть не предстовляю так как команда закрытия...

Как закрыть окно благодарности формы через определённое время
Добрых суток! Подскажите как закрыть окно &quot; Заявка принята&quot; чере опреденоные секунды...

9
Заблокирован
04.08.2016, 12:58 2
Лучший ответ Сообщение было отмечено Shonrens как решение

Решение

Shonrens, http://stackoverflow.com/quest... o-a-button
1
15 / 15 / 8
Регистрация: 06.06.2015
Сообщений: 99
04.08.2016, 22:50  [ТС] 3
Не помогло, выходит когда нажимаєш кнопку (View) срабатывает binding и работает класс ViewModel, но ViewModel ничего не знает про View и как его закрить я хз
0
1 / 1 / 0
Регистрация: 03.10.2015
Сообщений: 21
07.08.2016, 14:09 4
Я возможно не прав, но суть паттерна MVVM: сильное разделение Model View ViewModel.

В данной случае в не обращаетесь к ViewModel, не передаете куда-то данные, а просто работаете с View(если простое закрытие окна). Поэтому в данной случае уместно(как мне кажется) переместить команду/событие закрытие окна в code behind.

Прошу старожилов либо подтвердить, либо кинуть меня в/в меня котел с маслом.
1
294 / 234 / 58
Регистрация: 03.02.2011
Сообщений: 1,993
Записей в блоге: 1
07.08.2016, 14:33 5
Цитата Сообщение от Lutd Посмотреть сообщение
либо подтвердить, либо кинуть
Как сказали не единожды на разных форумах: паттерн служит тебе, а не ты паттерну.

Shonrens, если не используете никакие фреймворки, то я когда-то делал так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
private void OnSelectRowExecute(MouseEventArgs e) //К примеру, закрытие окна по даблклику на ListViewItem, привязанному к ICommand
        {
            ListView lv = (ListView)e.Source;
            var parent = VisualTreeHelper.GetParent(lv);
            while (!(parent is Window))
            {
                parent = VisualTreeHelper.GetParent(parent);
            }
 
            MaterialRecord = (DataBaseRecord)lv.SelectedItem;
            ((Window)parent).Close();
        }
Добавлено через 3 минуты
Но учтите, закрывая окно так - могут быть потом проблемы. Что с памятью, что с инстансами. Так что Lutd может быть прав.
1
294 / 234 / 58
Регистрация: 03.02.2011
Сообщений: 1,993
Записей в блоге: 1
07.08.2016, 14:51 6
Ещё варианты
Вложения
Тип файла: zip WindowCloseProperty.zip (100.6 Кб, 28 просмотров)
1
3 / 3 / 0
Регистрация: 16.02.2016
Сообщений: 8
08.08.2016, 19:40 7
уместно(как мне кажется) переместить команду/событие закрытие окна в code behind
Если окно закрывает само себя - то это имхо наилучшее решение.
Но если хочется соблюсти обряды - можно сделать через механизм сообщений.
View:
XML
1
<MenuItem Header="Exit" Command="{Binding CloseCommand}" />
C#
1
2
3
4
5
6
7
        public MainWindow()
        {
            InitializeComponent();
            Closing += (s, e) => ViewModelLocator.Cleanup();
 
            Messenger.Default.Register<CloseApplicationCommand>(this, (msg) => { this.Close(); });
        }
ModelView:
C#
1
public class CloseApplicationCommand { }
C#
1
2
3
4
5
6
7
8
9
        private RelayCommand _closeCommand;
        public RelayCommand CloseCommand
        {
            get
            {
                return _closeCommand ?? (_closeCommand = new RelayCommand(
                    () => { Messenger.Default.Send<CloseApplicationCommand>(new CloseApplicationCommand()); }));
            }
        }
1
11 / 11 / 9
Регистрация: 23.04.2013
Сообщений: 81
12.08.2016, 19:10 8
В CommandParameter передай окно, что-то типа такого:
XML
1
CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}"
1
15 / 15 / 8
Регистрация: 06.06.2015
Сообщений: 99
13.08.2016, 15:39  [ТС] 9
Название: Untitled.png
Просмотров: 388

Размер: 2.5 Кб
У меня есть 3 файла
в XAML(VIew)
XML
1
2
3
 <Button Command="{Binding ClickCommand}" >
                        OK
                    </Button>
в ViewModel

C#
1
2
3
4
5
6
7
8
9
10
11
12
  //Методы
public ICommand ClickCommand { get; set; }
 
 public RegistrationViewModel()
        {
            ClickCommand = new RelayCommand(arg => ClickMethod());
        }
 
        private void ClickMethod()
        {
            MessageBox.Show("I want to close the window");
        }
В место MessageBox.Show(); я хочу что би моя View закрилась
0
15 / 15 / 8
Регистрация: 06.06.2015
Сообщений: 99
14.08.2016, 11:10  [ТС] 10
Все разобрался ) использовал пункт:
2.7.2 Создание отдельного класса с делегатом
Ответы на 7 самых частых вопросов по WinForms
0
14.08.2016, 11:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.08.2016, 11:10
Помогаю со студенческими работами здесь

Как закрыть окно через секунду после того, как заполнится ProgressBar?
как Закрыть окно после одной секунды как заполняется Прогресс бар выложите пример...

Как закрыть окно формы и открыть окно другой
Код такой. Нужно по нажатии кнопки закрыть форму 1 и открыть форму 2... но, что-то так не работает...

Закрыть всплывающие окно через несколько секунд
Подскажите пожалуйста, есть код, в котором всплывает уведомление. Как сделать автоматическое...

как сделать так,чтобы когда я нажимаю кнопку закрыть в правом верхнем углу выходило окно сообшение?(типа вы хотите закрыть программу/да или нет/)
как сделать так,чтобы когда я нажимаю кнопку закрыть в правом верхнем углу выходило окно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru