在运行时期间从另一个调用ViewModel

时间:2014-01-31 22:14:28

标签: c# wpf mvvm

例如, 如果点击了一个按钮:

// 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时才能正常工作。但是在运行时我尝试调用它的任何其他时间似乎都无法工作。只是想知道可能出现什么问题。

2 个答案:

答案 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