【问题标题】:Adding additional properties in ViewModel在 ViewModel 中添加其他属性
【发布时间】:2011-05-22 17:20:09
【问题描述】:

我有一个 Silverlight 4 应用程序,它使用带有 SQL 数据库的 EF 和 WCF RIA 服务。我有一个要在网格或列表框中显示的任务表,并且我想做一个自定义分组。自定义分组将是过期、今天、明天、下一个 7 天和未来。

如果我正确理解了 MVVM 的概念,我应该在 TasksViewModel 中为我的 Tasks 对象创建一个自定义属性。但我不知道该怎么做。

我有在实体数据模型中自动创建的 Tasks 实体,并且我在我的视图模型中调用的 DomainService 中有一个 GetTasks 方法。

任何帮助将不胜感激。

【问题讨论】:

    标签: silverlight-4.0 mvvm wcf-ria-services


    【解决方案1】:

    您应该可以从客户端访问这些类型。您可以在 ViewModel 上创建一个可以绑定的 Task 实体列表。

    private List<Task> _tasks;
    public List<Task> Tasks
    {
         get { return _tasks; }
         set {
              _tasks = value;
              NotifyPropertyChanged("Tasks");
              }
    }
    

    如果您不想直接绑定到实体,也可以创建一个客户端 poco 来映射。

    【讨论】:

    【解决方案2】:

    以下内容与“gouping”无关,因为它似乎不是你的问题。

    我要做的是拥有ObservableCollection&lt;Task&gt; 的属性:

    public ObservableCollection<Task> Tasks {get; private set;}
    

    我在构造函数中初始化,请求域上下文加载任务,然后用回调中的数据填充集合,如下所示:

    private TasksDomainContext context;
    public TasksViewModel()
    {
        Tasks=new ObservableCollection<Task>();
        context= new TasksDomainContext();
        LoadTasks();
    }
    void LoadTasks()
    {
        context.Load(
            context.GetTasksQuery(),
            callback =>
                     {
                        if(callback.HasError)
                        {
                            //handle error
                        }
                        else
                        {
                            Tasks.Clear();
                            foreach(var task in callback.Entities)
                                Tasks.Add(task);
                        }
                     },
             null);
    }
    

    希望这会有所帮助;)

    P.S.:如果您在分组方面遇到问题,请提供更多详细信息

    【讨论】:

    • 这个例子可能有问题,上下文是 ctor 本地的并且在 LoadTasks 中使用。
    • @Derek:啊,是的,我将 load 调用重构为一个方法,忘记扩大上下文的范围。谢谢:)
    • 对不起,如果我的问题不清楚。您在答案中显示的所有内容我已经在我的视图模型中。现在我想添加一个名为 TaskGroup 的属性,它基于与任务关联的日期。对于集合中的每个任务,我想要这个新属性。例如,如果任务的日期是几天前,则任务组将是“过期”。如果日期是下周,则任务组将是“未来 7 天”。然后我想在 TaskGroup 上有我的 gridview 或 listbox 组。这更有意义吗?
    猜你喜欢
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    相关资源
    最近更新 更多