В MV-VM, куда идет мой код? - PullRequest
1 голос
/ 11 июня 2010

Итак, я надеюсь, что это довольно простой вопрос.

У меня есть веб-сервис, который я добавил с помощью Добавить ссылку на сервис.У него есть несколько методов для получения списка и получения подробной информации о перикулярной таблице в моей базе данных.

Я пытаюсь настроить интерфейс следующим образом:

  1. Загрузка приложения
    1. Загрузка служебного прокси
    2. Вызов метода GetList(); для отображения результатов в элементе управления ListBox
  2. Элемент двойного щелчка пользователя в ListBox, отображение модального диалогас подробным представлением

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

Дополнительная информация:

// Service Interface (simplification):

interface IService 
{
    IEnumerable<MyObject> GetList();
    MyObject GetDetail(int id);
}

// Data object (simplification)
class MyObject
{
    public int ID { get; set; }
    public string Name { get; set; }
}

Я думаю, у меня должно быть что-то вроде этого:

MainWindow
    MyObjectViewUserControl 
        Displays list
        Opens modal window on double click

Конкретные вопросы:

  1. Как бы выглядел мой класс ViewModel?
  2. Где кодсправиться с двойным щелчком мыши?
    1. Внутри UserControl?
    2. А как насчет команд, будет ли их хорошее применение?

Извините за подробности,но я очень новичок во всем этом, и я недостаточно образован, чтобы задавать правильные вопросы.

Я проверил образец MVVM с wpf.codeplex.com, и что-то не совсем для менятем не менее, потому что это кажется очень запутанным.

Ответы [ 3 ]

3 голосов
/ 11 июня 2010
  1. Ваша ВМ будет иметь:
    • ObservableCollection, которая содержит элементы, которые вы привязываете к своему ListBox.
    • CurrentItem, связанный с текущим выбранным элементом в списке
    • DelegateCommand, привязанный к двойному щелчку и вызывающий логику для отображения подробного представления (см. Способы MVVM для этого, подход, аналогичный сервису или агрегатору событий)
    • Логика для вызова invget GetList () и последующего заполнения этой коллекции
  2. Код для обработки двойного щелчка перейдет к ВМ (см. Выше)
1 голос
/ 12 июня 2010

У вас будет 2 ViewModels, потому что у вас есть 2 представления

1 ViewModel будет иметь

  1. Ваш прокси-сервер
  2. Список
  3. ShowDetailFor (string selectedItemFromList) Это должно создать новый экземпляр VM2, передав ему служебный прокси в ctor, и вызвать ShowDetail на VM2.

2 ViewModel будет иметь

  1. MyObject (если онэто просто окно сообщения, нет необходимости иметь ViewModel)
  2. ShowDetail (int id)

Когда у вас есть ViewModel, используйте привязку WPF и команду для подключения данных из ВМ в XAML

MVVM для управления пользователем становится немного сложнее, поэтому, если возможно, пока держитесь подальше от UserControls.

0 голосов
/ 12 июня 2010

См. Пример RegularExpressionViewModel в моем проекте yodelay .

Большая часть вашего кода будет идти в вашей ViewModel. Единственный код, который должен быть в вашем представлении, - это код, который связывает события представления с ViewModel. Обычно в представлении не требуется код, так как большая часть проводки может обрабатываться привязкой данных.

Я использую уровень абстракции презентации с Dependency Injection для взаимодействия с диалогами.

...