отображение дополнительной информации об элементе коллекции в MVVM - PullRequest
3 голосов
/ 01 августа 2011

новичок в WPF и MVVM, и я пытаюсь понять, как это сделать.

Скажем, у меня есть наблюдаемая коллекция объектов клиентов.Я могу привязать ListView или ItemsControl к этому, и все они отображаются нормально.

Теперь скажите, что у меня есть некоторая дополнительная информация о каждом элементе, который не хранится в объекте customer.Скажем, возможно, специальное предложение включено, и определенные клиенты имеют право на предложение, но этот флаг не хранится в объекте клиента.

Каков стандартный способ отображения этой дополнительной информации в списке?

Моя непосредственная мысль - создать новую коллекцию некоторой структуры в моей модели представления, которая будет содержать как объект клиента, так и этот флаг.Затем я могу привязать список прямо к этой коллекции и привязать различные компоненты отображения к соответствующим элементам структуры.

Однако, если у меня уже есть ObservableCollection клиентов, это кажется пустой тратой.Если я хочу, чтобы новый список был «живым», то мне нужно, чтобы новая коллекция подписывалась и реагировала на добавление / удаление в базовой коллекции клиентов.

Это способ сделать это?Или есть какой-то способ, которым я могу каким-то образом поддерживать флаги предложений отдельно, и все же привязывать их к себе в моем ListView?

Большое спасибо

1 Ответ

1 голос
/ 01 августа 2011

При использовании шаблона MVVM ViewModel является «моделью вашего представления», т. Е. Моделью, которая очень похожа на ваше текущее представление.

Я понимаю, почему вы хотите, чтобы ваша базовая модель хранила предложения и клиентов отдельно.

псевдокод:

class MyModel
{
   List<Offer> Offers {get; set;}
   List<Customer> Customers {get; set;}
}

Однако вы не можете привязать ListView к своим клиентам и каким-то образом соотнести их с вашими предложениями. Ваша ViewModel играет роль в формировании модели, чтобы ее было проще привязать к вашему представлению:

class CustomerViewModel
{
    // the customer model
    private Customer customer;

    // and offer - might be null
    private Offer offer;

    // expose properties of the two above model objects here
} 

Ваша модель представления создаст ObservableCollection из этих CustomerViewModel экземпляров, используя коллекцию экземпляров Customer модели, найдя Offer, если таковой существует.

Этот ObservableCollection<CustomerViewModel> может быть легко привязан к вашему взгляду.

...