我正在使用Xamarin& amp;开发Android应用程序MvvmCross。 View Models的简单版本可能如下所示:
public abstract class PersonViewModelBase
{
public string Name { get; set; }
}
public interface ICanRemove
{
MvxCommand RemoveCommand { get; }
}
public class LonelyPersonViewModel : PersonViewModelBase, ICanRemove
{
public bool IsHappy { get; set; }
public MvxCommand RemoveCommand { get { return new MvxCommand(() => RemoveFriend())); } }
private void RemoveFriend()
{
// Sends msg to remove a friend (using IMvxMessenger)
}
}
public class TiredPersonViewModel : PersonViewModelBase, ICanRemove
{
public int HoursSleepNeeded { get; set; }
// [ICanRemove implementation]
}
public class FriendlyPersonViewModel : PersonViewModelBase
{
public List<PersonViewModelBase> Friends { get; set; }
public MvxCommand AddFieldCommand
{
get
{
return new MvxCommand(
() => AddFriend());
}
}
private void AddFriend()
{
}
}
public class FriendsViewModel : MvxViewModel
{
public void Init()
{
Friends.Add(new LonelyPersonViewModel { Name = "Friend 1" });
Friends.Add(new TiredPersonViewModel { Name = "Friend 2" });
var friend3 = new FriendlyPersonViewModel { Name = "Friend 3" };
friend3.Friends.Add(new LonelyPersonViewModel { Name = "SubFriend 1" });
friend3.Friends.Add(new TiredPersonViewModel { Name = "SubFriend 2" });
Friends.Add(friend3);
Friends.Add(new LonelyPersonViewModel { Name = "Friend 4" });
var friend5 = new FriendlyPersonViewModel { Name = "Friend 5" };
var conjoinedFriend1 = new ConjoinedPersonViewModel { Name = "MultiPerson 1" };
conjoinedFriend1.CoPeople.Add(new TiredPersonViewModel { Name = "Jim" });
conjoinedFriend1.CoPeople.Add(new LonelyPersonViewModel { Name = "Nancy" });
friend5.Friends.Add(conjoinedFriend1);
Friends.Add(friend5);
}
public ObservableCollection<PersonViewModelBase> Friends { get; set; } = new ObservableCollection<PersonViewModelBase>();
}
“朋友”视图将是一个ListView,将“朋友”显示为平面项目或其他朋友列表。所以它看起来像这样:
[Add]和[Del]是绑定到ViewModel上的Add / Delete命令的按钮。目前,我正在使用PolymorphicListView示例中的CustomAdapter,因此每个ViewModel都映射到自定义布局。但是,我目前没有显示FriendlyPersonViewModel或ConjoinedPersonViewModel的完整信息。
我对如何继续进行了抨击:
以下是我目前的应用程序到目前为止的工作方式。带有“添加”按钮的第一个深蓝色部分用于添加后面的深蓝色部分;同样适用于绿色部分。正如我上面提到的,当我点击Add时,我想让后面的深蓝色部分显示第一个深蓝色部分。我希望第一个蓝色/绿色部分基本上是一个标题,并在它下面有下一个蓝色/绿色部分;然后点击添加并在右侧部分显示下一个正确的颜色而没有另一个标题。
有没有人对如何通过MVVMCross使用Xamarin.Android实现这一目标有任何建议或指导?
谢谢! -g
事后补充:看起来ObservableCollection上有一个InsertItem,如果我找到为secrion添加的最后一个项目的位置,我想添加下一个PersonBase,UI会正确更新吗? (已经离开了办公桌,或者我会检查。)
更新
只需使用Insert(idx,item)插入项目,实际上会正确更新UI并在正确的位置显示新项目。下一步是,你如何设计项目的样式,使它们显然是一个“群体”?