Добавление в коллекцию в MVVM - PullRequest
0 голосов
/ 13 сентября 2010

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

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, а функция Add принимает только тип User. В настоящее время у меня есть внутренняя функция в UserViewModel, которая предоставляет базовый объект User, мне было просто интересно, если это побеждало цель использования MVVM.

Спасибо!

Ответы [ 2 ]

1 голос
/ 13 сентября 2010

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

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

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

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

0 голосов
/ 13 сентября 2010

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

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

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

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

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