1

在我的 Wpf 项目中,我尝试将视图和视图模型分开。
我在想,例如视图模型和模型之间的数据契约应该从视图中隐藏。

然而,在实践中,您通常希望在视图中显示数据协定的简单属性,如果不引用视图中的数据协定,这是不可能的。

例如

Properties.Settings.Default.Group = basedata.Groups.CurrentItem.Code; 

需要引用 的类型CurrentItem

我还可以在视图模型中公开一个字符串属性,例如

public string CurrentGroupCode { get { return Groups.CurrentItem.Code; } }

这看起来也太过分了。我倾向于使用参考,因为它会减少代码。
有异议吗?

4

1 回答 1

2

实际上,我会选择您的选项 2。为什么?好吧,如果您想通过 实现通知机制INotifyPropertyChanged,这是最简单的方法。如果您想将值从模型传递到视图,反之亦然,您的示例将如下所示。

public SomeViewModel : ViewModelBase // assuming that you have a base class for this
{
    public string CurrentGroupCode
    {
        get { return Groups.CurrentItem.Code; }
        set
        {
             Groups.CurrentItem.Code = value;          // assuming that the VM has been intialized correctly
             RaisePropertyChanged("CurrentGroupCode"); // implemented in base class
        }
    }

    /*
     * ...Initialization, logic a.s.o.
     */
}

意味着,如果业务逻辑也应该在 VM 层实现,修改了这样的属性,视图将被通知并自动更新。此外,修改也将自动传播到模型。

您会看到,使用这种方法,您不仅可以从视图中隐藏模型,还可以在 VM 级别提供良好的模块化,因为其他 VM 不需要了解模型结构的某些内容。

于 2013-11-11T16:38:40.273 回答