【问题标题】:WPF: How to handle multi-XAML UIs? (Follow-Up)WPF:如何处理多 XAML UI? (跟进)
【发布时间】:2023-04-07 01:36:01
【问题描述】:

这是我之前帖子的延续:

WPF: How to handle multi-XAML UIs?

建议的解决方案(再次感谢 HighCore !!)很重要,我将其添加到我不断增长的编码库中。 User Control 似乎适用于已完全调试并准备就绪(如果您愿意的话,是一个只读库)的控件,因为没有提供可视化编辑。

我需要添加几个新的 XAML 文件(一个用于左侧选项卡内的 DataGrid,另一个用于右侧选项卡内的 DataGrid)。我的 ma​​in(调用者)XAML 将非常简单,如此简单以至于我可以省去任何编辑:

<Tab>
    <Tab Selection 1>
        <DataGrid 1 in some other XAML file>
    </Tab Selection 1>
    <Tab Selection 2>
        <DataGrid 2 in some other XAML file>
    </Tab Selection 2>
<Tab>

不过,我确实打算对 从属(称为)XAML 文件进行大量编辑,并且我需要图形设计器。

TIA

【问题讨论】:

  • 我不明白这个。为什么说 UserControls 上没有可视化编辑?那是错误的。 Visual Studio does 支持在可视化设计器中编辑用户控件。但是请注意using the Visual Studio designer to create WPF UIs is discouraged.
  • "为什么你说 UserControls 上没有可视化编辑?"我(再一次!)感到困惑。我指的是CustomControl。有一段时间我认为它们是一样的。

标签: wpf xaml datagrid


【解决方案1】:

你似乎从一个非常、非常不充分的角度来处理这一切。

首先,如果你使用 WPF,你真的需要忘记你可能从其他技术中学到的一切,理解并接受The WPF Mentality

在 WPF 中,UserControl 是可重用的、封装的、XAML 定义的 UI“片段”(您可以将其视为“小部件”)。

UserControl 由任意数量的 UI 元素组成:

  • GridDockPanelStackPanelWrapPanel等布局元素
  • 交互式用户界面元素,例如TextBoxComboBoxCheckBox 等。
  • Custom Controls
  • 其他UserControls.

MVVM设计模式(*)中View的概念,在WPF中通常以UserControls或Windows的形式具体化。

*在 WPF 中编写单行代码之前,您应该阅读和学习这些内容。


不过,我确实打算对下属进行大量编辑 (称为)XAML 文件,我需要图形设计器。

如果您需要修改某个 UserControl 的布局,那么您将不得不修改包含它的 XAML。您可以选择通过在 Visual Studio WPF 设计器中打开 MyUserControl.xaml 文件来执行此操作,但这是 highly discouraged,原因我不会进入 (*)。

推荐的方法是使用 Visual Studio XAML 编辑器窗口手动编辑 XAML 文件:

*链接中讨论了使用 VIsual Studio 设计器创建 WPF UI 的优缺点。


请注意,正如“WPF Mentality”帖子中所讨论的,创建 WPF 应用程序的思维过程与您在其他技术中所做的相反,您首先定义 UI,然后尝试调整您的逻辑和代码以适应用户界面。

在 WPF 中,ViewModel-First 方法通常是首选方法,您可以在其中定义数据模型,然后定义 ViewModels,它将在 UI 中公开预期的数据和功能,最后为用户界面。

这些 XAML 文件通常包含大量 DataBinding,而不是在模型和 UI 之间手动传递数据的过程方法。


底线:

要回答您的首要问题:是的,您在 Visual Studio 的 WPF 应用程序项目中定义了一些用户控件,通过编辑用户控件自己的 XAML(而不是属于将稍后包含此 UserControl),然后为该 UserControl 定义一个适当的 ViewModel(这可以而且应该在编写任何 XAML 之前完成),然后在整个应用程序中重用该 UserControl 及其 ViewModel。

一个 ViewModel 可能适用于许多不同的 View(UserControl 或 Window),但一个 View 通常需要一个特定的 ViewModel 并与之一起工作。

您的解决方案资源管理器应该与此类似:

其中MainViewModel 是MainWindow 的ViewModel,MyViewModelMyUserControl 视图的ViewModel。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-17
    • 2014-01-26
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多