WPF MVVM 子页面控制主窗体新增tab页面

Posted lonelyxmas

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF MVVM 子页面控制主窗体新增tab页面相关的知识,希望对你有一定的参考价值。

原文:WPF MVVM 子页面控制主窗体新增tab页面

一、方案

利用viewmodel之间消息传递方式

二、子页面

1、view.xaml

  1. <Button Content="接谈" Command="{Binding DataContext.JtCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}"
  2. Style="{StaticResource ButtonSuccess}" CommandParameter="{Binding Param}" Cursor="Hand"/>

2、viewmodel

  1. public RelayCommand<string> JtCommand =>
  2. new Lazy<RelayCommand<string>>(() =>
  3. new RelayCommand<string>(Jt)).Value;
  4. private void Jt(string param)
  5. {
  6. SendInfo = param;
  7. //消息传递给PindexModel接收,打开新的页面,第二个参数为消息key,控制接收对象
  8. Messenger.Default.Send<String>(SendInfo, "AddTab");
  9. }

 

三、主窗体页面

1、viewmodel

  1. public PIndexViewModel()
  2. {
  3. MenuList = GetMenuList();
  4. MenuSelectedIndex = 0;
  5. DataList = GetTabControlDataList();
  6. //接收其他页面传递的消息,第二个参数为消息key,控制接收对象
  7. Messenger.Default.Register<String>(this, "AddTab", ReceiveInfo);
  8. DateShow();
  9. timer = new DispatcherTimer();
  10. timer.Interval = TimeSpan.FromSeconds(1);
  11. timer.Tick += new EventHandler(TimerTick);
  12. timer.Start();
  13. }
  1. /// <summary>
  2. /// 消息处理
  3. /// </summary>
  4. /// <param name="msg"></param>
  5. private void ReceiveInfo(string msg)
  6. {
  7. AddTabItem(msg);
  8. }

2、xaml.cs

  1. public PIndex()
  2. {
  3. InitializeComponent();
  4. //卸载当前(this)对象注册的所有MVVMLight消息
  5. this.Unloaded += (sender, e) => Messenger.Default.Unregister(this);
  6. }

 

以上是关于WPF MVVM 子页面控制主窗体新增tab页面的主要内容,如果未能解决你的问题,请参考以下文章

C# WPF MVVM模式下在主窗体显示子窗体并获取结果

C# WPF MVVM模式下在主窗体显示子窗体并获取结果

如果子表单在表单视图中,访问 2003 循环当前页面不起作用

WPF子页面获取父框架

Layui子页面打开父页面tab问题

WPF 在MVVM模式下弹出子窗体的方式