在 WPF MVVM 中添加多个用户控件的最佳控件?

Posted

技术标签:

【中文标题】在 WPF MVVM 中添加多个用户控件的最佳控件?【英文标题】:Best Control to add Multiple UserControl in WPF MVVM? 【发布时间】:2012-04-28 18:41:56 【问题描述】:

我有一个主窗口,我想在其中添加我的其他视图。 用户可以在主窗口中打开多个不同的视图。

所以对于添加所有这些 Views(UserControls),这是最好的控件。

目前我正在使用 Canvas,但它不支持 MVVM。

那么如何添加多个控件。

这就是我到目前为止所做的事情

注意: 该控件应该同时托管多个 UserControl 我应该能够在该控件中在这里和那里拖动一个 UserControl,然后单击 UserControl 应该将它带到 Front(Focused),这是我在 Canvas 中使用 ZIndex 所做的。

【问题讨论】:

这是views esclusive 吗?我的意思是,如果我看到一个视图,我还能看到其他视图吗? 是的,使用应该能够查看该控件中的所有视图 画布看起来应该可以工作。不支持MVVM是什么意思? 我正在寻找更好的解决方案.. @KishoreJangid 不错的窗口风格,有没有可能得到那种风格? 【参考方案1】:

正确的 MVVM 解决方案可能是使用 ItemsControl 类并将视图模型集合绑定为 ItemsSource。

在该 ItemsControl 的 DataTemplate 中,我将为子视图模型指定正确的视图(在您的情况下是某种工具窗口)。

<ItemsControl.ItemTemplate>
    <DataTemplate>
        <views:ToolWindow DataContext=Binding />
    </DataTemplate>
</ItemsControl.ItemTemplate>

为了在您的图片上实现类似窗口的行为,我将指定基于 Canvas 的自定义面板,该面板将允许拖放行为。

<ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>
        <panels:MyCustomMdiPanel />
    </ItemsPanelTemplate>
<ItemsControl.ItemsPanel>

我想你已经有了画布解决方案。

【讨论】:

感谢我已经在使用 cuaton 可拖动画布。但我的问题是我无法添加来自不同视图模型的孩子。

以上是关于在 WPF MVVM 中添加多个用户控件的最佳控件?的主要内容,如果未能解决你的问题,请参考以下文章

WPF MVVM 将用户控件绑定到主窗口视图模型

WPF MVVM Lights - 具有不同参数的相同用户控件

如何从作为wpf mvvm模式中的窗口打开的视图模型中关闭用户控件?

WPF 如何向用户控件中添加新的控件

WPF|快速添加新手引导功能(支持MVVM)

如何正确绑定到 MVVM 框架中用户控件的依赖属性