WPF MVVM Сомнения - PullRequest
       4

WPF MVVM Сомнения

6 голосов
/ 20 сентября 2010

Здравствуйте, пользователи StackOverflow (или Stackoverflowers ?):

Я изучаю кодирование WPF.Я прочитал несколько статей / увидел несколько скринкастов и, исходя из опыта разработчиков веб-сайтов, запустил VS2010 и начал создавать пример приложения, которое помогло бы мне изучить основы.

Я тоже кое-что прочитал о MVVM и началиспользуй это.Я настроил свое решение на использование WPF 4.0, ActiveRecord 2.1 и SQLite, и все прошло хорошо.Но у меня все еще есть некоторые сомнения:

  • Я создал MainWindowViewModel и использую класс RelayCommand из здесь , чтобы ... передать команду.Не нарушаю ли я каких-либо указаний, имея MenuItem из MainWindow, чтобы его команда была привязана к свойству этой модели представления?

  • Это действие, к которому я привязываю команду MenuItem, собирается создать экземплярновый ViewModel и новый View, и показать его.Опять же, это нормально в контексте MVVM?

  • Мое MainWindow будет своего рода «приборной панелью», и у меня будет несколько моделей, прикрепленных к этой приборной панели.Должен ли я просто обернуть все эти модели в одну модель?

Примерно так:

public class MainWindowViewModel {

    private ObservableCollection<Order> openOrders;
    private Address deliveryAddress;
    private Order newOrder;
    /* Wrappers for the OpenOrders Collection */
    /* Wrappers for Delivery Address */
    /* Wrappers for New Order */
    /* Command Bindings */

}

TIA!

Ответы [ 3 ]

6 голосов
/ 20 сентября 2010

Я создал MainWindowViewModel и с этого момента использую класс RelayCommand для ... передачи команды. Нарушаю ли я какие-либо рекомендации, используя MenuItem из MainWindow, чтобы его команда была привязана к свойству этой модели представления?

Нет, вы не нарушаете никаких указаний. Вполне уместно привязать MenuItem к команде MainWindowViewModel (куда бы вы еще поместили эту команду?)

Это действие, к которому я привязываю команду MenuItem, собирается создать новую ViewModel и новый View и показать его. Опять же, это нормально в контексте MVVM?

Совершенно нормально, конечно, создать новую ViewModel. Что касается создания нового представления, то это зависит от того, как вы его создаете ... вы, конечно, должны никогда явно создавать представление из ViewModel, потому что это приведет к зависимости ВМ от представления. 1013 *

Мое MainWindow будет своего рода «приборной панелью», и у меня будет несколько моделей, прикрепленных к этой приборной панели. Должен ли я просто обернуть все эти модели в одну модель представления?

Это зависит от того, что вы подразумеваете под "переносом" ... Ваш MainWindowViewModel может предоставлять другие ViewModel через свойства, и эти виртуальные машины будут отображаться в разных частях представления. Если это то, что вы имеете в виду, да, вы должны обернуть их.

3 голосов
/ 20 сентября 2010

Добавление к ответу Томаса:

Я бы создал разные пользовательские элементы управления для каждой части панели управления и назначил бы viewModel для каждого пользовательского элемента управления.

2 голосов
/ 20 сентября 2010

Я создал MainWindowViewModel и с этого момента использую класс RelayCommand для ... передачи команды. Нарушаю ли я какие-либо рекомендации, используя MenuItem из MainWindow, чтобы его команда была привязана к свойству этой модели представления?

Нет, это именно то место, куда вы помещаете команды.

Это действие, к которому я привязываю команду MenuItem, собирается создать новую ViewModel и новый View и показать его. Опять же, это нормально в контексте MVVM?

Не нужно знать, как создать новое представление; это работа представления. Особенности того, как это сделать, зависят от того, как вы показываете это новое представление - это может быть так же просто, как наличие ContentPresenter в представлении, которое привязано к свойству в модели представления, поэтому, когда вы устанавливаете свойство (и поднимаете PropertyChanged ) ContentPresenter отображает новый объект со связанным с ним DataTemplate.

Вещи становятся немного странными, если под "созданием нового представления" подразумевается "открыть новое окно". Нет особенно элегантного способа сделать это, особенно если вы хотите, чтобы новое окно было модальным диалогом. Одним из способов является добавление обработчика событий в кодовый элемент представления, который прослушивает PropertyChanged в модели представления; когда свойство модели подчиненного представления устанавливается, код в представлении создает и показывает новое окно.

Мое MainWindow будет своего рода «приборной панелью», и у меня будет несколько моделей, прикрепленных к этой приборной панели. Должен ли я просто обернуть все эти модели в одну модель представления?

Конечно. Это действительно распространенная модель. Например, нет ничего необычного в том, чтобы выставить наблюдаемое свойство коллекции и привязать к нему какой-либо ItemsControl; представление автоматически создает представления для каждой модели представления, которую вы помещаете в эту коллекцию. Опять же, конкретная реализация действительно зависит от вашего приложения.

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