0

可以说我有一个 MainWindow 并在其中一个 Grid Column 放置我的 UserControl。并且用户可以通过按钮单击、选项卡或菜单项来切换该列中的用户控件。

我有 3 个用户控件:UserControl1、UserControl2、USerControl3 3 个 ViewModel:UserControl1ViewModel、UserControl2ViewModel、UserControl3ViewModel 一个 MainWindow 和一个 MainWindowViewModel

假设在此列中,默认的 userControl 是 UserControl1。如何通过单击按钮将其切换到 UserControl2。

我发现了一些这样的资源:

 <Window.Resources>
   <DataTemplate DataType="{x:Type vm:UserControl1ViewModel}">
      <v:UserControl1 />
   </DataTemplate>
   <DataTemplate DataType="{x:Type vm:UserControl2ViewModel}">
      <v:UserControl1 />
   </DataTemplate>
   <DataTemplate DataType="{x:Type vm:UserControl3ViewModel}">
      <v:UserControl3/>
   </DataTemplate>
</Window.Resources>

这个想法是以某种方式将命令绑定到按钮或菜单项以切换用户控件。该代码将在 MainWindowViewModel 中处理。

4

1 回答 1

1

在您的 MainViewModel 创建一个属性来保存显示ViewModel如下

    private Object _DisplayedViewModel;

    public Object DisplayedViewModel
    {
        get { return _DisplayedViewModel; }
        set
        {
            _DisplayedViewModel = value;
            // Your INotifyPropertyChanged notification
            //RaisePropertyChanged("DisplayedViewModel");
        }
    }

MainWindow.xaml中,绑定DisplayedViewModel到框架内容。

<Frame Content="{Binding DisplayedViewModel}" NavigationUIVisibility="Hidden"/>

对于按钮命令绑定

    private ICommand _ShowUC2;

    public ICommand ShowUC2
    {
        get {
            if (_ShowUC2 == null)
            {
                _ShowUC2 = new RelayCommand() =>
                {
                    DisplayedViewModel = new UserControl2ViewModel();
                };
            }
            return _ShowUC2; }
    }

假设您的 VM 连接正确,将 设置DisplayedViewModel为三个 UserControlViewModel 引用中的任何一个都会导致各自UserControl显示在框架中。

于 2013-05-03T14:37:39.560 回答