我一直在尝试实现MVVM,而且大多数情况下我都非常喜欢它。我已经能够找到大多数问题的答案,但有一件事我要么完全失踪,要么真的没有。这是关于通过RIA服务从服务器发送的数据。
在大多数用于在ViewModel中公开模型数据的示例似乎采用了两种方式之一,将整个模型公开为属性(我不喜欢这种方法):
public class MyViewModel : [SomeBaseClass]
{
private MyModel _model;
public MyModel Model
{
get { return _model; }
set
{
if(_model == value)
return;
_model = value;
PropertyChanged("MyModel");
}
}
}
OR,实现要从模型公开到视图的各个属性。这是我一直在做的方式,但这是相当多的额外工作。
使用对象列表的许多示例显示代码,该代码公开ObservableCollection<TEntity>
(或某个版本的泛型集合),其中TEntity是由RIA生成的类,然后将其绑定到控件ItemsSource等。采集。好的,到目前为止一切顺利。但是当我需要根据绑定对象处理命令时会发生什么?到目前为止,我处理这个ObservableCollection<CustomViewModel>
。当我从服务器获取数据时,我遍历返回的集合并将其“转换”为我的CustomViewModel并将其放入我的集合中。像这样:
LoadOperation load = Context.Load(Context.GetTasksForUserQuery(userId));
load.Completed += (s, e) =>
{
if (!load.HasError)
{
_userTasks = new ObservableCollection<TaskItemViewModel>();
foreach (Task entity in load.Entities)
_userTasks.Add(new TaskItemViewModel(entity, Context));
}
}
现在我可以根据需要向TaskItemViewModel类添加命令等。但这并不是最佳的。
这里有一个很好的例子(现在约会):An MVVM Approach to Telerik Domain Services for Silverlight 该示例启用服务器端分页,过滤,分组等,并且运行良好。它再次绑定到RIA对象的集合,在这种情况下是客户列表。如果我想/需要在绑定项目级别处理某些命令怎么办?
我错过了什么?我知道你可以有元类和共享代码,但从我的播放/尝试它似乎不符合要求。能够绑定到<RIAObject>
的集合会容易得多。有没有办法做到这一点并拥有我的“附加”命令?任何帮助/思考/输入都会很棒!
谢谢你, 克里斯