【问题标题】:WPF - MVVM and switching VIEWs into one mainviewWPF - MVVM 并将视图切换到一个主视图
【发布时间】:2019-12-31 13:22:19
【问题描述】:

我是 C# 和 WPF 的新手,很抱歉我的问题 :)

我有一个主视图和多个视图(用户控制元素)。我想在单击菜单(mahapps hamburgermenu)从 /Views/homepage.xaml 或 /Views/credits.xaml 等中选择视图后显示在主视图中。

我有 GalaSoft.MvvmLight 和 mahapps haburger menu 但是的工作代码:

每次点击菜单显示当前视图(它仍然可以)但创建新实例而不是重新显示创建的视图。因为我在子视图中包含用户填充值的文本框、复选框等,所以每次我点击菜单时,视图都会加载完整的新视图并清除所有值。

我不知道,我的问题是否清楚:-D 简单地说:我需要一个在其他视图中打开的主视图,但不创建新实例,但如果之前已填充,则始终显示包含用户数据内容的视图

这里是代码:https://github.com/sgamescz/HH6C

【问题讨论】:

    标签: c# mvvm view datacontext mahapps.metro


    【解决方案1】:

    欢迎来到 SO!

    实现这一点的常用方法是使用 ContentControl 和 DataTemplate。通常,您的主视图模型如下所示:

    public class MainViewModel : ViewModelBase
    {
        private object _CurrentPage;
        public object CurrentPage
        {
            get { return this._CurrentPage; }
            set
            {
                if (this._CurrentPage != value)
                {
                    this._CurrentPage = value;
                    RaisePropertyChanged(() => this.CurrentPage); // <--- important that you do this
                }
            }
        }
    

    然后,您将为要显示的每种页面类型创建一个视图模型类(例如 MyPageViewModel)。在您的 MainWindow XAML 中,您可以像这样添加 ContentControl:

    <ContentControl Content="{Binding CurrentPage}" />
    

    然后,您使用 DataTemplate 告诉 WPF 在其 Content 绑定到视图模型类的实例时如何填充内容控件:

    <!-- can put put in your Window.Resources block or App.xaml resources block -->
    <DataTemplate DataType="{x:Type MyPageViewModel">
        <Grid>  <!-- could also use a custom control if you like -->
        </Grid>
    </DataTemplate>
    

    当您创建 MyPageViewModel 的实例并将其分配给 CurrentPage 时,您会看到 CustomControl 填充了 DataTemplate。

    【讨论】:

      猜你喜欢
      • 2023-04-01
      • 1970-01-01
      • 2014-10-24
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多