使用MVVM在WPF中打开一个新窗口

时间:2018-01-23 05:48:35

标签: wpf mvvm

我是MVVM的新手。我有一个窗口Demo.xaml,它有菜单,在菜单下我有子菜单。我想打开子菜单窗口,即使用MVVM方法点击子菜单时的Test.Xaml。 我做了一个测试窗口的对象,但它没有显示" Show"属性。 我也试过使用委托命令,但我失败了。 我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:0)

解决问题最常见的MVVM方法是将子菜单项的“Command”绑定到ViewModel中实现ICommand的属性。然后,在命令的执行中,您可以打开您选择的窗口。

答案 1 :(得分:0)

您需要使用ICommand - 使用RelayCommand时使用MVVM是最佳做法。

请参阅下面的示例:

<强> MainWindow.xaml

<MenuItem Header="Settings" Command="{Binding CmdOpenSetting}" >                    
    <MenuItem.Icon>
        <Image Source="..\Resources\if_Gnome-Preferences-System.png" Height="16" Width="16" Margin="0,0,-5,0" />
    </MenuItem.Icon>
</MenuItem>

<强> MainWindow.xaml.cs

public MainWindow()
{
    InitializeComponent();

    //Singelton not needed
    MainWindowViewModel.Instance = new MainWindowViewModel();
    this.DataContext = MainWindowViewModel.Instance;

    //Also works
    this.DataContext = new MainWindowViewModel();
}

<强> MainWindowViewModel.cs

private RelayCommand _commandOpenSettings;

public ICommand CmdOpenSetting
{
    get
    {
        if(_commandOpenSettings.IsNull())
        {
            _commandOpenSettings = new RelayCommand(param => OpenSettings());
        }
        return _commandOpenSettings;
    }
}

注意您可能需要根据CmdOpenSetting的实施情况调整RelayCommand

请参阅Example RelayCommand