【问题标题】:Switching UserControls in a Window?在窗口中切换用户控件?
【发布时间】:2013-05-03 14:21:44
【问题描述】:

假设我有一个 MainWindow 并在其中一个网格列中放置我的 UserControl。 并且用户可以通过按钮点击、tab或者menuItem来切换该列中的usercontrol。

我有 3 个用户控件:UserControl1、UserControl2、USerControl3 3 个视图模型: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 中处理。

【问题讨论】:

    标签: wpf mvvm


    【解决方案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 显示在框架中。

    【讨论】:

    • 你也可以用object代替IViewModel
    • 感谢发帖,但是如何制作一个按钮 ICommand 来更改用户控件
    • @AnandMurali ,我看到了这样的参考 displayViewModel = new ViewModel.UserControl2ViewModel();它不工作
    • 您是否使用Frame 来显示UserControl
    • 我用的是ContentControl,不过你也可以用Frame
    猜你喜欢
    • 1970-01-01
    • 2013-01-15
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多