从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()'!
我无法查看您的项目,因为它需要Windows 8,但您确定您的FirstViewModel
作为FirstView
的DataContext
与您在MainViewModel
中提到的FirstViewModel
相同吗?从我所看到的,你在MainViewModel
的构造函数中新建了一个FirstViewModel
,它是私有的。