从MainViewModel调用ViewModel的方法

本文关键字:方法 ViewModel 调用 MainViewModel | 更新日期: 2023-09-27 18:10:40

我目前有一个问题,通过2个viewmodel之间的通信。下载我的应用程序在这里看看问题:http://www76.zippyshare.com/v/26081324/file.html

我有两个视图

  • MainView。

  • FirstView。

MainView有一个Content = FirstView的ContentControl。我的FirstViewModel看起来像这样:

public class FirstViewModel : ViewModelBase
{
    public FirstViewModel()
        {
        One = "0";
        Two = "0";
        Ergebnis = 0;
    }
    private string _one;
    public string One
    {
        get { return _one; }
        set
        {
            if (value != null)
            {
                    _one = value;
                    Calculate();
                    RaisePropertyChanged(() => One);
            }
        }
    }
    private string _two;
    public string Two
    {
        get { return _two; }
        set
        {
                    _two = value;
                    Calculate();
                    RaisePropertyChanged(() => Two9;
        }
    }
    private decimal _ergebnis;
    public decimal Ergebnis
    {
        get { return _ergebnis; }
        set
        {
            if (value != null)
            {
                if (value != _ergebnis)
                {
                    _ergebnis = value;
                    RaisePropertyChanged(() => Ergebnis);
                }
            }

        }
    }
    public void Calculate()
    {
        if (Two != null)
        {
            for (int i = 0; i < 500; i++)
            {
                Ergebnis = i;
            }
            Ergebnis = (decimal.Parse(One) + decimal.Parse(Two));
        }
    }

正如你所看到的,每次属性'One'或'Two'的值被改变时,它都会调用Calculate()。我现在想要的是,当我点击MainView中的按钮时,MainViewModel必须在FirstViewModel中调用Calculate()。所以我在属性中注释了Calculate(),并在MainViewModel中实现了RelayCommand:

MainView中的按钮

<Button Grid.Row="3" Command="{Binding ChangeValue}" />

MainViewModel

public MainViewModel
{
    ChangeValue = new RelayCommand(ChangeValueCommandExecute);
}
public RelayCommand ChangeValue { get; private set; }
private FirstViewModel fwm;
private void ChangeValueCommandExecute()
{
    //CurrentView = Content of the ContentControl in the MainView, which is FirstView
    if (CurrentView.Content.ToString().Contains("FirstView"))
    {   
        fwm.Calculate();
    }
}

这意味着当我单击Button时,ChangeValueCommandExecute()正在被调用。该命令将调用fwm.Calculate()并设置新的总和(=Ergebnis)。问题是,当计算()被调用时,"一"answers"二"的值总是"0"。那么我如何在另一个ViewModel中调用ViewModel的方法呢?

编辑:为了明确:我想调用FirstViewModel()的方法'Calculate()',而不使用'new FirstViewModel()'!

从MainViewModel调用ViewModel的方法

我无法查看您的项目,因为它需要Windows 8,但您确定您的FirstViewModel作为FirstViewDataContext与您在MainViewModel中提到的FirstViewModel相同吗?从我所看到的,你在MainViewModel的构造函数中新建了一个FirstViewModel,它是私有的。