以下是2010年的文章:MVVM:要不要包扎?
我想知道,从那时起,它是否存在某种框架或类来帮助我们围绕model构建包装器,从而完成与模型中的INotifyPropertyChanged模型属性和ObservableCollection有关的所有工作。
我的观点是,我必须构建一个UI,不能控制模型。该模型更新自身及其不同的ObservableCollection,并具有许多层次结构。类似于:
class A
|
some properties that implement INotify
ObservableCollection<Class B>
class B
|
some properties that implement INotify
ObservableCollection<Class C>
class C
|
etc...目前,VM直接引用模型属性,但UI非常简单。为了能够添加新的UI特性,一个方便的方法是每个模型都有一个VM,这样我就可以在层次结构的每个级别上添加一些自定义UI属性,并使用VM对象的ObservableCollection来结束。
在开始自己添加这些痛苦的管道之前,我想看看这里的人是如何处理这些问题的。
非常感谢。
发布于 2014-02-26 15:37:27
最后,我想说明以下几点:
MVVM包装器
发布于 2014-02-26 13:07:48
你可以做很多事情:
使用PostSharp对编译后的代码进行后处理,通过添加必要的代码来更改IL。优点:很容易。缺点:堆栈跟踪中的行号不再匹配源代码中的行号。就我个人而言,我不想用它来做这个。
把它吸进去然后写代码。
我自己也使用LinqPad来编写这样的脚本:
void Main()
{
StringBuilder sb = new StringBuilder();
string source = @" public bool Passed { get; set; }
public string Name { get; set; }
public Type TestType { get; set; }
public Exception Exception { get; set; }
public TestStage StageFailed { get; set; }
public bool IncludeTest { get; set; }";
string[] lines = source.Replace('\r', ' ').Split('\n');
for (int i = 0; i < lines.Length; i++)
{
string prop = lines[i].Trim();
string[] propBits = prop.Split(' ');
string type = propBits[1];
string name = propBits[2];
sb.Append("private " + type + " " + PascalCase(name) + ";\r\n");
sb.Append("public " + type + " " + name + "\r\n");
sb.Append("{\r\n");
sb.Append("get { return this." + PascalCase(name) + "; }\r\n");
sb.Append("set\r\n");
sb.Append("{\r\n");
sb.Append("if (this." + PascalCase(name) + " != value)\r\n");
sb.Append("{\r\n");
sb.Append("this." + PascalCase(name) + " = value;\r\n");
sb.Append("RaisePropertyChanged(\"" + name + "\");\r\n");
sb.Append("}\r\n");
sb.Append("}\r\n");
sb.Append("}\r\n");
}
sb.ToString().Dump();
}
private string PascalCase(string name)
{
return name.Substring(0, 1).ToLower() + name.Substring(1);
}我复制代码以将INotify位放入其中:string source = @"和将运行它的输出复制到我的源代码中。工作完成了。
LinqPad是一个非常非常有用的工具。
https://stackoverflow.com/questions/22041102
复制相似问题