Команды в View-Models - PullRequest
       1

Команды в View-Models

0 голосов
/ 12 февраля 2012

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

Вот мой сценарий.

У меня есть окно - Customer.xaml.

В нем находятся 2 пользовательских элемента управления

  • viewCustomerSearch.xaml
  • viewCustomerDetails.xaml

У каждого из них есть своя модель представления.

Итак, иерархия выглядит так:

... Customer.xaml

... ... viewCustomerSearch.xaml

... ... ... viewmodelCustomerSearch.xaml

... ... viewCustomerDetails.xaml

... ... ... viewmodelCustomerDetails.xaml

Я понимаю, что это не редкий сценарий.

Для чего он стоит, пользователь выбирает клиента, дважды щелкнув по строке списка в элементе управления viewCustomerSearch.xaml.

Проблема в том, что теперь мне нужно сообщить классу viewmodelCustomerDetails.xaml, какой клиент пользователь только что выбрал. Я не могу решить это вообще.

Есть ли у кого-нибудь справка о том, где я объявляю нужную мне команду, как она подключается, где запускается код реализации и т. Д.?

Любая помощь с благодарностью, DS

Ответы [ 2 ]

4 голосов
/ 12 февраля 2012

Как правило, для взаимодействия между моделями представления вы можете:

  1. Использовать стандартные события .NET и использовать модель родительского представления в качестве посредника - в вашем случае модель представления Customer будет иметьссылки на 2 модели дочерних представлений и могут подписываться на события и вызывать соответствующие методы в моделях дочерних представлений при публикации событий
  2. Использовать шаблон агрегатора событий

Такие структурыкак Caliburn.Micro и Prism обеспечивают реализацию шаблона агрегатора событий.

0 голосов
/ 12 февраля 2012

В качестве альтернативы, если вам не нужны полностью отделенные модели представления, тогда ваш Customers.xaml может установить свой DataContext для экземпляра CustomersViewModel. Представление поиска наследовало бы этот контекст данных, связывало бы его представление списка со списком клиентов и устанавливало бы свойство SelectedItem в ответ на двойной щелчок. Подробное представление DataContext будет связано со свойством SelectedItem.

public class CustomersViewModel : ViewModelBase
{
    public Customer SelectedItem
    {
        get { return _selectedItem; }
        set { Set(() => SelectedItem, ref _selectedItem, value); }
    }

    private Customer _selectedItem;
    public IEnumerable<Customer> Customers { get; private set; }
}

public class Customer : ViewModelBase
{
    private string _name;

    public string Name
    {
        get { return _name; }
        set { Set(() => Name, ref _name, value); }
    }
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...