2012-02-12 7 views
0

Команды по View-Models

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

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

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

Это дома 2 UserControls

  • viewCustomerSearch.xaml
  • viewCustomerDetails.xaml

Каждый из них имеет свою собственную модель представления.

Таким образом, иерархия выглядит следующим образом:

... Customer.xaml

... ... viewCustomerSearch.xaml

... ... ... viewmodelCustomerSearch. XAML

... ... viewCustomerDetails.xaml

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

Я понимаю, что это «необычный» сценарий.

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

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

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

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

+0

Вы также можете использовать библиотеку MVVM Light и свой класс Messenger, это намного проще и легче, чем призма или калибра. – vorrtex

ответ

4

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

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

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

+3

@ user762566 Вы также можете быть заинтересованы в [этой статье] (http://rachel53461.wordpress.com/2011/06/05/communication-between-viewmodels-with-mvvm/) Я написал в качестве основного обзора, как событие системы работают в MVVM – Rachel

+0

Спасибо, все. @Rachel ваша статья была очень полезным введением. Я реализовал это с помощью событий, как это было предложено. – Gray

0

В качестве альтернативы, если вам не нужны полностью развязанные модели просмотра, то ваш Client.xaml может установить свой DataContext для экземпляра CustomerViewModel. Представление поиска наследовало бы этот контекст данных, привязало бы его список списка к списку клиентов и установило бы свойство 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); } 
    } 
    ... 
} 
Смежные вопросы