2010-09-12 3 views
0

У меня есть 2 ViewModels. Один из них называется User (содержащий основную информацию, ничего не притворяется), а другой называется Group, которая имеет свойство IEnumerable of User. Это IEnumerable подкреплена словарем (есть много пользователей, нужно искать их быстро)Добавление в коллекцию в MVVM

public class Group 
{ 
    #region Fields 
    private Dictionary<string, User> userLookup; 
    #endregion //Fields 
    public Group() 
    { 
     userLookup = new Dictionary<string, User>(); 
    } 


    public User[] Users 
    { 
     get 
     { 
      return userLookup.Values.ToArray<User>(); 
     } 
     set 
     { 
      foreach (var user in value) 
      { 
       if (!userLookup.ContainsKey(user.Login)) 
        userLookup.Add(user.Login, user); 
      } 
     } 
    } 

    public bool AddUser(User user) 
    { 
     if (userLookup.ContainsKey(user.Login)) 
      return false; 
     userLookup.Add(user.Login, user); 
     return true; 
    } 
} 

Теперь классу GroupViewModel нужно добавить новый пользователь, но все GroupViewModel получает показано UserViewModels, и функция «Добавить» принимает только тип «Пользователь». В настоящее время у меня есть внутренняя функция в UserViewModel, которая предоставляет базовый объект User, я просто задавался вопросом, победил ли это с целью использования MVVM.

Спасибо!

ответ

1

Было моим пониманием, что в MVVM целью ViewModel было предоставление публичных данных и взаимодействие для представления. Поэтому, если представление требует изложения этих данных, тогда нет, я не думаю, что это нарушает MVVM, я думаю, что он вполне соответствует структуре. Хотя некоторые из более опытных разработчиков могут иметь более глубокое понимание.

Также в вашем имуществе Users вы удваиваете свой код AddUser в настройщике.

set 
{ 
    foreach (var user in value) 
     AddUser(user); 
} 

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

+0

спасибо, не заметил, что один :) – TerrorAustralis

0

Я думаю, что это нормально, пока вы делаете это с помощью методов.

Посмотрите, что означает MVVM: «Не связывайте объекты домена напрямую с« Просмотр, оберните их в «Модель просмотра».

Методы не используются для привязки, если вы не используете ObjectDataProvider.

Другим способом, вы можете иметь GroupViewModel для хранения словаря UserViewModel.

Смежные вопросы