powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Взаимодействие ViewModels
4 сообщений из 4, страница 1 из 1
Взаимодействие ViewModels
    #38060609
Nicky_N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На форме (WPF) DatePicker, кнопки Сохранить, Обновить и TabControl. Один tabitem - winforms usercontrol, другой - wpf usercontrol. Думаю сделать 2 ViewModel - один для MainWindow, второй - для wpf usercontrol. Натолкните, пожалуйста, на мысль, как организовать их взаимодействие, а именно:
при изменении свойства из MainViewModel, привязанного к DatePicker, изменяются свойства в UserControlViewModel (если активен TabItem с wpf usercontrol), если активен TabItem с winforms usercontrol - надо уведомить его.
при нажатии по кнопке Сохранить - данные сохраняются то из одного TabItem, то из второго, аналогичное поведение с кнопкой Сохранить.
...
Рейтинг: 0 / 0
Взаимодействие ViewModels
    #38061511
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nicky_NНа форме (WPF) DatePicker, кнопки Сохранить, Обновить и TabControl. Один tabitem - winforms usercontrol, другой - wpf usercontrol. Думаю сделать 2 ViewModel - один для MainWindow, второй - для wpf usercontrol. Натолкните, пожалуйста, на мысль, как организовать их взаимодействие, а именно:
при изменении свойства из MainViewModel, привязанного к DatePicker, изменяются свойства в UserControlViewModel (если активен TabItem с wpf usercontrol), если активен TabItem с winforms usercontrol - надо уведомить его.
при нажатии по кнопке Сохранить - данные сохраняются то из одного TabItem, то из второго, аналогичное поведение с кнопкой Сохранить.

См prism.

1. Публиковать событие при изменении свойства в DatePicker
2. См CompositeCommand
...
Рейтинг: 0 / 0
Взаимодействие ViewModels
    #38063066
Nicky_N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. По поводу организации уведомлений появилась идея использовать INotifyPropertyChanged MainWindowViewModel:
в WinFormsChildControl и WPFChildControlViewModel создать по свойству CurrentDate и изменять его при изменении CurrentDate из MainWindowViewModel. Вопрос теперь как подписаться на событие PropertyChanged MainWindowViewModel. мой вариант с использованием события Loaded MainWindowControl:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
    public partial class MainWindowControl : UserControl
    {
        public MainWindowControl()
        {
            InitializeComponent();
        }

        WinFormsChildControl wfChildControl;
        WPFChildControlViewModel wpfChildControlViewModel;

        private void MainWindowControl_Loaded(object sender, RoutedEventArgs e)
        {
            WPFChildControl wpfChildControl = new WPFChildControl();
            wpfChildControlViewModel = new wpfChildControlViewModel();
            wpfChildControl.DataContext = wpfChildControlViewModel;
            // tiWpfChildControl - TabItem, содержащий wpfChildControl
            tiWpfChildControl.Content = wpfChildControl;

            wfChildControl = new wfChildControl();
            // wfh - WindowsFormsHost в TabItem
            wfh.Child = wfChildControl;
            wpfChildControlViewModel.PropertyChanged += WpfChildControlViewModel_PropertyChanged;
        }

        private void WpfChildControlViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
            if (e.PropertyName == "CurrentDate")
            {
                wfChildControl.CurrentDate = (sender as WPFChildControlViewModel).CurrentDate;
                wpfChildControlViewModel.CurrentDate = (sender as WPFChildControlViewModel).CurrentDate;
            }
        }
    }



Код рабочий, однако DateTimePicker приходится передернуть, чтоб свойство изменилось. Прошу альтернативные мнения (только без IoC-контейнеров).
...
Рейтинг: 0 / 0
Взаимодействие ViewModels
    #38063363
Nicky_N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибся, надо так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
        private void MainWindowControl_Loaded(object sender, RoutedEventArgs e)
        {
            ...
            (this.DataContext as MainWindowControlViewModel).PropertyChanged += MainWindowControlViewModel_PropertyChanged;
        }

        private void MainWindowControlViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
            if (e.PropertyName == "CurrentDate")
            {
                wfChildControl.CurrentDate = (sender as MainWindowControlViewModel).CurrentDate;
                wpfChildControlViewModel.CurrentDate = (sender as MainWindowControlViewModel).CurrentDate;
            }
        }
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Взаимодействие ViewModels
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]