【问题标题】:Silverlight Commands MVVMSilverlight 命令 MVVM
【发布时间】:2011-07-22 19:46:22
【问题描述】:

我想“减少”我的 ViewModel 类中的命令数量。 我有一个包含 5 个以上列表的 ViewModel(使用 View 上的 Listboxes 进行演示,并且我将 ObservableCollection 绑定到其 ItemSource 参数;还绑定了 SelectedItem 属性),并且每个列表都应该有自己的 Add/Remove/etc 按钮。

所以,它看起来像这样:

public class PersonViewModel : ViewModelBase
{
    Person _Person;
    private ObservableCollection<WorkPlaceViewModel> _WPlaces;
    private ObservableCollection<LanguageViewModel> _Languages;
    ... other lists

    private WorkPlaceViewModel _SelectedWorkPlaceView;
    ...

}

添加 5x2 命令会使 ViewModel 有点大。我可以将一个字符串硬编码到 CommandParameter 并在我的 ViewModel 中使用 switch-case 来处理它,但这听起来像是黑客攻击。 :p 或者我应该为每个列表框创建一个删除命令,并将 SelectedItem 作为参数传递?

在 MVVM 中最好的方法是什么?

【问题讨论】:

    标签: silverlight mvvm command viewmodel


    【解决方案1】:

    为什么你的视图模型中有一组视图模型? PersonViewModel 应该完成什么。在我看来,您需要将视图分解为多个视图并将它们绑定到不同的视图模型。您的视图和视图模型应尽可能小以减少耦合。

    也就是说,我建议在每个可观察集合上添加/删除命令。如您所料,使用硬编码字符串很麻烦。如果每个 observable 集合都有自己的 add/remove,这将允许每个集合有不同的逻辑并且更易于维护。

    您能否从您的 ViewModel 中发布更多代码并稍微描述一下该应用程序?这将帮助我们确定是否有更好的设计决策。

    【讨论】:

    • 目标是为员工创建个人资料页面。在个人资料页面上,员工以前的工作场所、教育信息、技能等都在列表框中可见。每个工作场所、教育等都有自己的模型类和自己的虚拟机。我现在正在重写代码,将 ObservableCollections 放在单独的类中(而不是 PersonViewModel 中的 WorkPlaceViewModels 的 OCollection,我将使用 WorkPlaceListViewModel),并在那里实现命令。这样,这些 ListViewModel 将处理它们的命令,而不是 PersonViewModel。
    猜你喜欢
    • 1970-01-01
    • 2010-12-01
    • 2011-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多