【问题标题】:WPF can we swap panels (DockPanel, StackPanel)?WPF 我们可以交换面板(DockPanel、StackPanel)吗?
【发布时间】:2011-06-09 15:24:11
【问题描述】:

我想创建两种不同类型的 DockPanel。如果用户单击一个链接,则加载 DockPanel #1,否则加载 #2。

我们可以动态交换它们吗?我是 WPF 的新手。在 REALBasic 中,我会使用 GroupPanel,如果需要,我会交换它们。

谢谢

【问题讨论】:

  • “交换”和“加载”是什么意思?这听起来当然是可能的,但是如果不了解您的设计,就很难给您一个好的答案。话虽如此,这听起来像是 MVVM 应用程序的一个不错的候选者。
  • 从来没有真正理解过 MVVM。尝试但无法掌握MVVM的概念。 (我知道 MVC)
  • 这确实是一个旁白,有点宽泛,但 MVVM 与 MVC“非常”相似。每个模型都相同,视图用于显示数据。不同之处在于最后一部分 - 在 MVVM 中,View 专门与 ViewModel 对话,而 VM 与 Model 进行所有对话(以及处理所有命令)。诚然,这是一个过于笼统的解释,但它(希望)为您提供了另一个难题。

标签: c# visual-studio-2010 c#-4.0 stackpanel dockpanel


【解决方案1】:

U 可以动态创建控件并使用其他控件填充其内容。或者你可以只放置两种类型并隐藏你不想显示的一种。

【讨论】:

    【解决方案2】:

    看看Josh Smith's MVVM Article in MSDN Magazine。 Josh 被许多人认为是 MVVM 大师,这篇文章很好地解释了基础知识。

    考虑到这一点,我可能会将您的应用程序作为 MVVM 应用程序。

    模型将“只是”成为您的数据模型(很像 MVC 中的)。

    接下来,您的每个面板都会有一个视图。每个视图都可以设置为 DataTemplate(如文章中所示),或设置为 UserControl(正如我在许多其他地方所做的那样)。这样做可以使其模块化,并且更易于扩展、维护等。

    您的 MainWindow 实际上也被视为一个视图,您可以在其上放置其他视图。

    所有视图都将由一个或多个 ViewModel 类控制。你有多少取决于你的设计。通常,如果有不同的功能,您将在 View 和 ViewModel 之间建立或多或少的一对一关系(尽管您当然可以与单个 ViewModel 共享多个 View)。通常还会有一个“Main ViewModel”类将所有东西放在一起。

    一般而言,鉴于您的问题的一般描述,您的 ViewModel 可能会包含一个命令(或多个命令),当您的用户选择链接时会处理该命令。该命令可能会设置一些属性,这些属性将控制显示哪个视图(通常通过绑定)。

    抱歉,我无法比这更详细,但如果我这样做了,我需要更多地了解你的设计,而且我必须写更多的东西,这在这个论坛中并不合适.

    【讨论】:

      猜你喜欢
      • 2011-05-20
      • 2011-05-18
      • 1970-01-01
      • 2011-03-11
      • 2013-02-26
      • 1970-01-01
      • 1970-01-01
      • 2011-03-14
      • 1970-01-01
      相关资源
      最近更新 更多