【问题标题】:Pop out view model into separate window (like a Chrome tab)将视图模型弹出到单独的窗口中(如 Chrome 选项卡)
【发布时间】:2015-12-06 01:31:18
【问题描述】:

我的应用程序由一个带有各种视图模型的窗口组成,这些视图模型显示图形/图表/表格等。我的用户已经决定他们希望能够弹出一个图表并将其显示在自己的窗口中,类似于您可以将选项卡拖出 Chrome,或将停靠视图拖出 Visual Studio,以在其自己的窗口中查看。

我想避免生成视图模型的新实例以在新窗口中使用。

有没有办法在将视图模型从一个窗口移动到另一个窗口时保留它?有没有一种方法可以轻松地从一个可视化树中删除相应的视图并将其添加到另一个?

更新:

我查看了 AvalonDock,但它并不是我想要的。我只想将现有的视图模型从 UI 的一部分移动到窗口。有什么想法吗?

【问题讨论】:

  • AvalonDock 用于 Dock 并像 VS 一样取消停靠。

标签: wpf mvvm data-binding viewmodel visual-tree


【解决方案1】:

我想避免为 在新窗口中使用。

我想知道为什么会这样?无论如何,您可以通过这种方式实现它:

// App.xaml.cs
public static MainViewModel MainVM {
    get {
        // create and return main view model once
    }
}

// Classes
public class MainViewModel {

    private ViewModel1 vm1;
    public ViewModel1 VM1 {
        get {
            return vm1;
        }
    }

    public void InitializeViewModel1() {
        ...
    }
}

public class ViewModel1 {
    ...
}

虽然这适用于您的情况,但我建议您阅读有关拥有静态或单一视图模型实例的信息,并确定您是否仍要遵循这种方法。

【讨论】:

  • 感谢您的回答,但它没有回答问题。我已经在这样做了。问题是 WPF 不喜欢在可视化树中多次使用视图模型。它并不能完全正确地生成所有视图组件。在我使用 WPF 的 3 年多的时间里,我看到了一些非常奇怪的东西。
  • 我不想生成视图模型的新实例,因为我必须保存所有用户的更改,所以我可以在它已经处于的确切状态下重新生成它. 在 VS 中,它们不会在新窗口中重新生成虚拟机之前杀死您的虚拟机。他们只是移动它。
猜你喜欢
  • 2017-07-11
  • 2011-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-13
  • 1970-01-01
  • 2023-04-01
  • 2012-01-20
相关资源
最近更新 更多