在 WPF 窗口上加载多个 UserControls

2024-04-21

我有一个窗口,在其中加载一个用户控件(例如 Control1)。现在,如果用户单击某个新的 UserControl 按钮,Control2 应该加载到窗口上,而 Control1 应该消失。同样,当用户单击下一个 UserControl 的按钮时,Control3 应该被加载,而 Control2 应该消失。也应该可以返回,例如从控制 3 到控制 2。

在我的窗口上加载第一个主 UserControl 很容易,我已经做得足够多了。但我一直困惑于如何实现用户控件之间的“导航”。以前从未做过类似的事情。 我将 MVVM 用于我的 WPF 应用程序。有人有什么想法吗?

Thx.

编辑: 根据 Rachel 的回答,我现在在切换控件的命令中执行此操作: 在主窗口中:

<DataTemplate DataType="{x:Type ViewModel:MainControlViewModel}">
<my:MainControl />
</DataTemplate>
<DataTemplate DataType="{x:Type ViewModel:ProductsControlViewModel}">
<my:ProductsControl />
</DataTemplate>


 <Grid>
<ContentControl Content="{Binding CurrentPageViewModel, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</Grid>

在 MainControlViewModel 中和在 ProductsControl 中几乎相同:

 public ICommand LoadProductControlCommand
{
  get
  {
    if (_loadProductControl == null)
      _loadProductControl = new RelayCommand(LoadProductControl);
    return _loadProductControl;
  }
}

private void LoadProductControl(object notUsed)
{
  _mainWindowViewModel = (MainWindowViewModel) Application.Current.MainWindow.DataContext;
  _mainWindowViewModel.CurrentPageViewModel = new ProductsControlViewModel();
}

这是一个好方法还是我应该采取不同的方法?因为在我的应用程序中,按钮位于控件上,而不是主窗口上。


在主窗口中放置一个 ContentPresenter,如下所示:

<ContentPresenter Content="{Binding ActiveWidget}"/>

然后在ViewModel中

public ViewModelBase ActiveWidget {get;set;} // Don't forget INotifyPropertyChanged!!

那么你必须创建一个DataTemplate对于每个ViewModel与一个适当的实例UserControls. See 本文 http://www.codeproject.com/Articles/444371/Creating-WPF-Data-Templates-in-Code-The-Right-Way对此的通用解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 WPF 窗口上加载多个 UserControls 的相关文章

随机推荐

  • 一页上有多个夏季笔记 div

    我正在尝试获取特定夏季笔记 div 的代码 其中单个页面上有多个笔记 div 我的暑假笔记是用 php 从数据库创建的 如下所示 div class tab content div class tab pane div class summ
  • 如何在大窗口上优化窗口聚合?

    我在 Spark 2 4 4 中使用带有大窗口的窗口函数 例如 Window partitionBy id orderBy timestamp 在我的测试中 我有大约 70 个不同的 ID 但我可能有大约 200 000 行 ID 如果没有
  • 检索 AR 模型的所有关联属性?

    您认为检索 AR 模型所有关联的所有属性的最佳方法是什么 即 假设我们有模型Target class Target lt ActiveRecord Base has many countries has many cities has ma
  • 使用推断的 (?) 类型克隆 std::iter::Map

    我在以紧凑的方式克隆地图时遇到问题 extern crate itertools num use itertools num linspace fn main 440Hz as wave frequency middle A let fre
  • 没有 GameKit 的 iOS 蓝牙

    我已经知道使用 GameKit 我只能连接到运行相同应用程序的其他 iOS 设备 但我想连接到 Parallaz EasyBluetooth 芯片来发送和接收命令 因此我需要不同的解决方案 我想有一些针对越狱设备的库 但我不知道 你能给我一
  • 我什么时候知道 GeoFire 已完成加载,因为它是基于事件的触发器

    因此 我使用 GeoFire 和 AngularFire 来填充我的 ng repeat 项目列表 有一个离子拉动来刷新列表 因此 用户拉动它并获取当前更新的位置并刷新列表 调用 GeoFire 来重新填充列表 scope doRefres
  • 未捕获的类型错误:无法读取未定义的属性(读取“isBatchingLegacy”)

    我正在尝试使用 jest 测试反应打字稿项目 但它给出了一个令人困惑的错误 错误图像 https i stack imgur com gdWQp png 这是我的 package json dependencies testing libr
  • 未捕获的引用错误:谷歌未定义

    我正在尝试将 geoJSON 文件中的标记加载到我的地图上 地图加载正常 但不断出现错误 Uncaught ReferenceError google is not defined 在这一行 google maps event addDom
  • 使用Python修改INI文件

    我有一个 INI 文件需要使用 Python 进行修改 我正在调查ConfigParser模块 但仍然遇到问题 我的代码是这样的 config ConfigParser RawConfigParser config read C itb i
  • 解析,如何向目标用户发送推送通知

    我已成功设置解析推送通知 并且在我的安装表中我同时拥有安装和设备令牌 我真正想做的是将推送通知发送给某些用户 而不是某些设备 如何将安装表绑定到使用表 以便我可以由用户进行查询并返回要推送到的设备ID From https parse co
  • 如何将 Maxmind .MMDB 转换为 .DAT?

    如何将 MaxMinds MMDB GeoIP 转换为 DAT 格式 以便我可以与 modsecurity Apache 一起使用 Modsecurity 仅支持 DAT 格式 截至 2019 年 2 月 以下 Python 脚本是将 Ge
  • 任务之间的气流延迟

    As you can see in the image airflow is making too much time between tasks execution it almost represents 30 of the DAG e
  • 如何使用 Rollup 构建自定义引导程序包

    根据Bootstrap 5官方文档 我们可以从以下位置导入预编译的js文件bootstrap js dist并使用 Webpack rollup 构建自定义捆绑包 https getbootstrap com docs 5 0 gettin
  • 为什么从 UI 中删除命令源后会调用 CanExecute?

    我试图理解为什么在已从 UI 中删除的命令源上调用 CanExecute 这是一个简化的程序来演示
  • API向后兼容性的最佳实践

    我正在开发一个与 JSON API 进行通信的 iPhone iPad Android 应用程序 该应用程序版本的第一个版本已经完成 现在正在进行其他开发阶段 在其他阶段 应用程序需要与新版本的 API 集成 并允许用户访问其他功能 例如新
  • 在C中将多个值分配给数组

    有没有办法以压缩的形式做到这一点 GLfloat coordinates 8 coordinates 0 1 0f coordinates 1 0 0f coordinates 2 1 0f coordinates 3 1 0f coord
  • SSIS:如何使用链接服务器:

    我已经通过 MS SQL Server Management Studio 成功添加了链接服务器 它的名称是 SQL2 Link 当我在 SSIS 中添加一个连接作为 ADO NET 连接时 它不会显示在可用选项列表中 如何将其添加为 SS
  • hg 存档到远程目录

    有没有办法通过 SSH 将 Mercurial 存储库存档到远程目录 例如 如果可以执行以下操作 那就太好了 hg archive ssh email protected cdn cgi l email protection path to
  • Karma-webpack+Angular TypeError:未定义不是对象(评估 '$httpBackend.expectPOST'

    我收到以下错误 PhantomJS 2 1 1 Linux 0 0 0 leave API service create should create a leave FAILED static app min js 4804 54 forE
  • 在 WPF 窗口上加载多个 UserControls

    我有一个窗口 在其中加载一个用户控件 例如 Control1 现在 如果用户单击某个新的 UserControl 按钮 Control2 应该加载到窗口上 而 Control1 应该消失 同样 当用户单击下一个 UserControl 的按