現在、2 つの ViewModel 間の通信で問題が発生しています。ここからアプリをダウンロードして問題を確認してください: http://www76.zippyshare.com/v/26081324/file.html
私は2つのビューを持っています。
データコンテキスト「MainViewModel」を含む「MainView.xaml」。
データコンテキスト「FirstViewModel」を持つ「FirstView.xaml」。
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();
}
}
これは、ボタンをクリックすると、ChangeValueCommandExecute() が呼び出されることを意味します。Command は fwm.Calculate() を呼び出し、新しい合計 (=Ergebnis) を設定します。問題は、Calculate() が呼び出されると、'One' と 'Two' の値が常に "0" になることです。では、ViewModel のメソッドを別の ViewModel で呼び出すにはどうすればよいでしょうか。
編集:明確にするために:「new FirstViewModel()」を使用せずにFirstViewModel()のメソッド「Calculate()」を呼び出したいです!