1

我一直在尝试实现 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");
        }
    }
}

或者,实现您希望从模型公开到视图的各个属性。这是我一直这样做的方式,但这是相当多的额外工作。

许多使用对象列表的示例显示代码公开一个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>. 有没有办法做到这一点并拥有我的“附加”命令?任何帮助/想法/输入都会很棒!

谢谢你,克里斯

4

0 回答 0