C# 在WPF MVVM应用程序中,从另一个窗口读取一个窗口中控件的值
我正在创建一个小的WPF应用程序。我必须遵循我新加入的MVVM模式 我有两个视图(A、B)和两个视图模型 这是我的场景,我在窗口a中有一个radiobutton。检查radiobutton后,我在窗口a中单击next。事件将关闭窗口a并打开窗口B 在窗口B的viewmodel的构造函数中,我需要知道是否选中了窗口A中的Radiobutton。我该怎么做 如果您“必须遵循MVVM模式”,那么您“必须”执行以下操作 首先,需要为视图A和视图B创建两个ViewModel(但如果需要,可以只留下一个ViewModel)。对于ViewModelA,您应该创建属性,并使用下一步按钮绑定,而布尔属性已选中。ViewModelB应该包含一个接受bool参数的构造函数,或者一个属性,该属性应该在视图B显示之前更新 下面是如何实现的示例: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
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));
}
}