Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在WPF MVVM应用程序中,从另一个窗口读取一个窗口中控件的值_C#_Wpf_Mvvm - Fatal编程技术网

C# 在WPF MVVM应用程序中,从另一个窗口读取一个窗口中控件的值

C# 在WPF MVVM应用程序中,从另一个窗口读取一个窗口中控件的值,c#,wpf,mvvm,C#,Wpf,Mvvm,我正在创建一个小的WPF应用程序。我必须遵循我新加入的MVVM模式 我有两个视图(A、B)和两个视图模型 这是我的场景,我在窗口a中有一个radiobutton。检查radiobutton后,我在窗口a中单击next。事件将关闭窗口a并打开窗口B 在窗口B的viewmodel的构造函数中,我需要知道是否选中了窗口A中的Radiobutton。我该怎么做 如果您“必须遵循MVVM模式”,那么您“必须”执行以下操作 首先,需要为视图A和视图B创建两个ViewModel(但如果需要,可以只留下一个Vi

我正在创建一个小的WPF应用程序。我必须遵循我新加入的MVVM模式

我有两个视图(A、B)和两个视图模型

这是我的场景,我在窗口a中有一个radiobutton。检查radiobutton后,我在窗口a中单击next。事件将关闭窗口a并打开窗口B

在窗口B的viewmodel的构造函数中,我需要知道是否选中了窗口A中的Radiobutton。我该怎么做

如果您“必须遵循MVVM模式”,那么您“必须”执行以下操作

首先,需要为视图A和视图B创建两个ViewModel(但如果需要,可以只留下一个ViewModel)。对于ViewModelA,您应该创建属性,并使用下一步按钮绑定,而布尔属性已选中。ViewModelB应该包含一个接受bool参数的构造函数,或者一个属性,该属性应该在视图B显示之前更新

下面是如何实现的示例:

public class ViewModelA : ViewModelBase
{
    public ViewModelA()
    {
        _nextCommand = new Cmd(this);
    }
    public ICommand NextCommand { get { return _nextCommand; } }

    public bool IsChecked
    {
        get { return _isChecked; }
        set
        {
            _isChecked = value;
            RaisePropertyChanged("IsChecked");
        }
    }
    private ICommand _nextCommand;
    private bool _isChecked;
}
在A的*.xaml视图中,您应该具有以下内容:

<RadioButton IsChecked="{Binding Path=IsChecked}" />
<Button Content="Next" Command="{Binding Path=NextCommand}" />

您可以看到的示例,而不是为每个命令创建其类,这些示例的作用大致相同。

您可以将radiobutton状态传递给window B构造函数。
public class ViewModelB : ViewModelBase
{
    private bool _isAChecked;
    public bool IsAChecked
    {
        get
        {
            return _isAChecked;
        }
        set
        {
            _isAChecked = value;
            RaisePropertyChanged("IsAChecked");
        }
    }
}

public class Cmd : ICommand
{
    ViewModelA _vmA;
    public Cmd(ViewModelA vmA)
    {
        _vmA = vmA;
    }
    public bool CanExecute(object parameter)
    {
        return true;
    }

    public event EventHandler CanExecuteChanged;

    public void Execute(object parameter)
    {
        var vmB = new ViewModelB();
        vmB.IsAChecked = _vmA.IsChecked;
        // after that create ViewB, and set its DataContext to vmB
    }
}

public class ViewModelBase : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    public void RaisePropertyChanged(string propertyName)
    {
        var handler = PropertyChanged;
        if (handler != null)
            handler(this, new PropertyChangedEventArgs(propertyName));
    }
}