[英]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.