我刚刚开始使用MVVM模式,并决定将MVVM Light工具包用于Windows Phone应用程序。
我的问题是这样的:
我在生成 View 模型时遇到麻烦,该 View 模型可以将 View 正确绑定(bind)到具有不仅仅是原始类型的属性的模型—这是构造模型和随附 View 模型的一种有效方法,以便 View 可以绑定(bind)到模型通过 View 模型,并在模型中的值更改时正确更新?
与之类似,如何正确地从 View 模型中引用模型的值?
这种类型的模型的一个示例是 Foo 类,它具有一个属性b,它是一个基元;另一个属性a,类型是 Bar ,具有自己的属性-基元或否则。
Foo:
public class Foo : ObservableObject
{
public Foo()
{
a = new Bar();
}
public const string aPropertyName = "a";
private Bar _a;
public Bar a
{
get
{
return _a;
}
set
{
Set(aPropertyName, ref _a, value);
}
}
public const string bPropertyName = "b";
private bool _b;
public bool b
{
get
{
return _b;
}
set
{
Set(bPropertyName, ref _b, value);
}
}
}
酒吧:
public class Bar : ObservableObject
{
public const string cPropertyName = "c";
private bool _c;
public bool c
{
get
{
return _c;
}
set
{
Set(cPropertyName, ref _c, value);
}
}
}
编辑:澄清一下,在 View 模型中设置属性时,我应该做些什么:
public const string cPropertyName = "c";
public bool c
{
get
{
return model.a.c;
}
set
{
model.a.c = value;
RaisePropertyChanged(cPropertyName);
}
}
还是不同的?
最佳答案
我认为您要提出的问题是嵌套与平面 View 模型。根据情况,这两种方法都是正确的方法(尽管我更喜欢嵌套 View 模型)。
我不建议您使用什么,但是以Foo-Bar为例,用Foo中的属性包装Bar的属性会更有意义[Flat View模型方法]。因此,您通过创建属性c所做的事情是正确的。
以下是我对两种方法的看法
嵌套 View 模型的优点
平面 View 模型的优势
关于c# - 使用MVVM模式(尤其是使用MVVM Light)时,如何实现不仅仅是原始图元的模型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28913055/