例如, 如果点击了一个按钮:
// Call second VM from first VM and process values
new SecondViewModel().Values = new string[] { "value1", "value2" };
第二个ViewModel。但是,这永远不会奏效。
public string[] Values;
public DatagridViewModel()
{
ProcessStrings(Values);
}
以下作品:
public string[] Values = new string[] { "value1", "value2" };
public DatagridViewModel()
{
ProcessStrings(Values);
}
在我看来,只有在第一次编译ViewModel时才能正常工作。但是在运行时我尝试调用它的任何其他时间似乎都无法工作。只是想知道可能出现什么问题。
答案 0 :(得分:1)
这是因为Values
属性尚未设置为您调用它的方式;构造函数需要在调用setter之前完成,并且在构造函数中尚未设置Values
。您必须将值传递给构造函数,或稍后设置Values
:
var vm = new SecondViewModel();
vm.Values = new string[] { "value1", "value2" };
vm.ProcessStrings();
更好的是,使用一个属性:
private string[] values;
public string[] Values
{
get { return values; }
set
{
if (this.values == value)
return;
this.values = value;
this.ProcessStrings();
}
}
答案 1 :(得分:0)
如果在按钮事件处理程序中创建VM,首先是调用构造函数,然后将它们分配给Values
。因此,如果您在构造函数ProcessStrings(Values)
中调用,则参数为null
。