我有一个模型,其中包含每个视图的视图模型。该模型在会话中举行,并在应用程序启动时初始化。我需要能够使用来自另一个视图模型的值填充来自一个视图模型的字段,因此使用了 lambda 函数。下面是我的模型。我正在使用 lambda,因此当我获得 Test2.MyProperty 时,它将使用 FunctionTestProperty 从 Test1.TestProperty 中检索值。
public class Model
{
public Model()
{
Test1 = new Test1()
Test2 = new Test2(FunctionTestProperty () => Test1.TestProperty)
}
}
public class Test1
{
public string TestProperty { get; set; }
}
public class Test2
{
public Test2() : this (() => string.Empty)
{}
public Test2(Func<string> functionTestProperty)
{
FunctionTestProperty = functionTestProperty;
}
public Func<string> FunctionTestProperty { get; set; }
public string MyProperty
{
get{ return FunctionTestProperty() ?? string.Empty; }
}
}
当我第一次运行应用程序并从 Test1 导航到 Test2 时,这非常有效;我可以看到,当我获得 MyProperty 的值时,它会回调模型构造函数并检索 Test1.TestProperty 值。但是,当我随后提交表单 (Test2) 时,它会调用将其设置为 string.Empty 的默认构造函数。因此,如果我返回 Test1 并再次返回 Test2,它总是会调用 Test2 默认构造函数。有谁知道为什么这在第一次运行应用程序时有效,但在提交视图后无效,或者我犯了明显的错误?