3

現在、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()」を呼び出したいです!

4

1 に答える 1

2

Windows 8 が必要なため、あなたのプロジェクトを表示できませんがFirstViewModel、あなたDataContextの 私が見ることができることから、プライベートであるのコンストラクターで a を新しくしています。FirstViewFirstViewModelMainViewModelFirstViewModelMainViewModel

于 2013-04-24T22:20:43.150 に答える