簡體   English   中英

在MVVM中添加到集合

[英]Adding to a collection in MVVM

我有2個ViewModel。 一個稱為用戶(包含基本信息,沒有花哨的內容),另一個稱為組,其具有作為屬性的用戶的IEnumerable。 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,並且“添加”功能僅接受類型User。 目前,我在UserViewModel上具有一個內部函數,該函數公開了底層的User對象,我只是想知道這是否違反了使用MVVM的目的。

謝謝!

據我了解,在MVVM中,ViewModel的目的是為視圖提供公共數據和接口。 因此,如果視圖需要說明此數據,則否,我認為這不違反MVVM,我認為它與框架非常一致。 盡管有些經驗更豐富的開發人員可能會有更多的見識。

同樣在“ Users屬性中,您可以在設置器中加倍使用AddUser代碼。

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

如果輸入用戶的條件發生變化或變得更加復雜,它可能會更容易並且省去了更改設置程序的麻煩。

我認為只要您通過方法進行操作就可以。

看,MVVM說的是“不要將域對象直接綁定到View,而是將它們包裝在View Model中”。

除非您使用ObjectDataProvider,否則方法不用於綁定。

另一種方法,您可以使用GroupViewModel來保存UserViewModel的字典。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM