代码之家  ›  专栏  ›  技术社区  ›  TerrorAustralis

添加到MVVM中的集合

  •  0
  • TerrorAustralis  · 技术社区  · 14 年前

    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上有一个内部函数,它公开了底层用户对象,我只是想知道这是否违背了使用MVVM的目的。

    谢谢!

    2 回复  |  直到 14 年前
        1
  •  1
  •   Val    14 年前

    据我所知,在MVVM中,ViewModel的目的是为视图提供公共数据和接口。因此,如果视图需要对这些数据进行说明,那么不,我不认为这违反了MVVM,我认为它与框架非常一致。尽管一些经验更丰富的开发人员可能有更多的洞察力。

    在你的 Users 属性,则在setter中加倍使用AddUser代码。

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

    如果输入用户的条件发生变化或变得更复杂,可能会更容易,也不会让您不得不更改setter。

        2
  •  0
  •   RockWorld    14 年前

    方法不用于绑定,除非您使用的是ObjectDataProvider。

    另一种方法是,可以让GroupViewModel保存UserViewModel的字典。