Arhn - архитектура программирования

Приложение WPF с несколькими пользовательскими элементами управления, передающими значения в MainViewModel (MVVM)

У меня есть приложение wpf, которое показывает 5 различных пользовательских элементов управления, когда вы проходите через систему. Каждый пользовательский элемент управления имеет список. Итак, я хочу выбрать элемент и передать его обратно в MainViewModel. У меня это работает сейчас, так что я могу сохранить значение в ViewModelBase, но кажется, что моя тактика для вызова пользовательских элементов управления ошибочна, поскольку я не могу связать каждую отдельную ViewModel, а только ViewModelBase. Я понимаю, где я ошибаюсь, но мне интересно, есть ли способ сделать это, инициализируя каждый Usercontrol отдельно, а не только из viewModelBase, как я делаю здесь:

    private ViewModelBase _control;
    public ViewModelBase Control
    {
        get { return _control; }
        set
        {
            _control = value;
            OnPropertyChanged("Control");
        }
    } 

а потом я говорю на загружен

     Control = new MainScreenViewModel();
     ynd = new YesNoDelegate(YesNoNavigation);
     Control.SetReturnData(ynd);
     Control.name = "MainScreen";

Затем управление вызывается в xaml, например

     <ContentControl  Content="{Binding Control}" Height="350" Width="525" Grid.Column="1"/>

любая помощь была бы очень признательна.
Спасибо.

04.06.2010

  • Я не знаю, я один не понял ваш дизайн. Однако можете ли вы четко объяснить свой дизайн? Что подразумевается под этим: So i want to select an item and pass it back to MainViewModel. Вы хотите выбрать ListBoxItem? Все ли usercontrol и mainview используют один и тот же контекст данных? 04.06.2010
  • Ну, в основном, у меня есть ViewModels для каждого пользовательского элемента управления. Итак, скажем, есть usercontrol1.xaml со списком. У меня есть personVariable в моей модели usercontrol1view, и я сохраняю там выбранный элемент. Теперь я хочу, чтобы он был передан обратно в мою mainViewModel, когда я нажмите кнопку. Это работает, когда переменные в моей ViewModelBase (где у меня есть доступ для отправки делегата) ynd = new yesnodelegate (yesNoNavigation); Control.SetReturnData(Ynd); Этот метод setReturnData находится в ViewModelBase, но я хочу, чтобы он был в Usercontrol1ViewModel, но тогда он не получит к нему доступ. Извините, что сбиваю с толку. я все еще изучаю MVVM 04.06.2010

Ответы:


1

Взгляните на MVVMLight в Messenger Class, если вам нужна связь между ViewModels.

Этот конкретный ответ иллюстрирует вы, как его использовать.

04.06.2010

2

Я переключился с использования класса Messenger на использование CommandManager, который является родным для WCF, специально определяя пользовательскую RoutedUICommand, а затем используя CommandManager.RegisterClassCommandBinding в месте или местах, которые должны были ответить на команду.

Преимущество заключается в том, что не нужно наследовать от mediatorbase. Не нужно полагаться на код, который автор прекратил поддерживать (хотя он хорошо написан!). Не нужно использовать декораторы и полагаться на строки для ключа сообщения.

08.06.2010
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..