【问题标题】:Is it really possible to separate xaml and code behind?真的可以将xaml和代码分开吗?
【发布时间】:2015-03-29 03:24:44
【问题描述】:

我是 wpf 的新手,有些东西我不明白.. 我到处都在阅读有关代码和 UI 分离的信息。那么它应该如何工作,即使我可以混合设计所有东西,我背后的代码总是对变化做出反应并在其他情况下改变可见性......所以首先没有控件的名称,后面的代码将无法编译……即使我有名字,协调起来不是很不可能吗?

【问题讨论】:

  • 重读主题“MVVM”
  • 如果你命名一个控件,....你可能做错了

标签: c# wpf xaml


【解决方案1】:

你说的建筑有问题。 您不需要模型数据中的控件名称。模型数据唯一与之交互的是事件/命令。这样一来,您就可以将表示和数据分开,而模型视图是这两者之间的桥梁。

【讨论】:

  • 好的,我现在你不必像 windowsforms 或 ASP.net 那样提供 id 或名称。但是假设你有一个应用程序,你正在等待来自服务器的消息您必须更改视觉设计的每种消息类型...您必须从后面的代码访问控件,而没有名称怎么办?感谢您的回答!
  • 不,你不需要。您定义 UI 模板,并根据我们模型的状态编排它们。您收到有关模型更改的信号,您更改了一些变量并将信号返回给 ui。 UI 通过更改 UI 外观并将加载的数据映射到控件来响应该信号。
  • @Franki1986:为您提供一些基本的起点:dotnet.dzone.com/articles/control-templates-wpf
【解决方案2】:

在“代码和 UI 分离”讨论的上下文中,您并没有将 Xaml 与 Code-Behind 分开。相反,您将 logic 从 Xaml 中分离出来,因此也将 logicCode-Behind 中分离出来。 p>

在构造 Xaml 控件时,不仅构造了 xaml“视图”,而且构造了初始化控件的支持分部类。结果,您总是有一个代码隐藏。它是 Xaml 工作方式的基本组成部分。

【讨论】:

    【解决方案3】:

    您所描述的是 WinForms 的一种典型方法,其中实现 UI 和逻辑的真正分离是不可能的,因为应用程序是由挂钩到特定控件的事件驱动的。

    但是,在 WPF 中,您不使用(或不必使用)事件来进行 UI 和应用程序逻辑之间的通信。值得您研究的主要领域是:

    非常广泛的概述是 XAML 描述布局并指定布局应从何处获取数据。正确的数据存在于数据上下文中,并且 WPF 引擎负责所有的连接(或 绑定)。

    <TextBlock Text="{Binding Caption}" />
    

    例如,在上面的代码中,TextBlock 中的Text 将填充数据上下文中Caption 属性中存储的值。 (通常在用户控件或用户窗口的级别上指定数据上下文。) 在后面的代码中,没有任何内容与 TextBlock 或使用值填充它相关。

    你会在后面的代码中找到通常只是DataContext的初始化:

    public partial class MyUiClass
    {
        public MyUiClass()
        {
            this.Loaded += (sender, e) => { this.DataContext = new MyViewModelClass(); }
        }
    }
    

    所有数据都作为数据上下文存储在类集中(上例中的 MyViewModelClass)。

    作为下一步,我建议您阅读一些 MVVM 教程(YouTube 上有很多不错的教程)。

    【讨论】:

    • 好的,谢谢大家的信息!我红了很多文章,但有时通过简短的对话获取信息,改变了观点!
    • 没问题。这就是为什么我建议您在 YouTube 上搜索一些教程。您可以一步一步地跟随它,您会看到代码是如何从一个步骤到另一个步骤的。在书面教程中,如果您对特定技术完全陌生,您可能会在步骤之间迷失,因为代码可能会动态变化而无法遵循。今天晚些时候我会尝试挖掘一些好的链接。
    • 这个系列真的很适合初学者:youtube.com/watch?v=EpGvqVtSYjs
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    • 2021-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多