xaml 和code behind 真的可以分开吗?
Is it really possible to separate xaml and code behind?
我是wpf的新手,有些地方我不明白..
我到处都在阅读有关代码分离和 UI 的内容。那么它应该如何工作,即使我可以设计混合中的所有内容,我的代码总是对变化做出反应并在其他情况下改变可见性......所以首先没有控件的名称,后面的代码将无法编译...即使我有名字,协调起来也不是很不可能吗?
你说的架构有问题。
您不需要模型数据中的 names of control。模型数据唯一交互的是 events/commands。通过这种方式,您可以将表示和数据分开,其中模型视图是这两者之间的桥梁。
在 "separation of code and UI" 讨论的上下文中,您没有将 Xaml 与代码隐藏分开。相反,您将 logic 与 Xaml 分开,结果将 logic 与 分开还有代码隐藏。
构造 Xaml 控件时,不仅会构造 xaml "view",还会构造初始化控件的后备部分 class。结果,您总是有一个代码隐藏。这是 Xaml 工作原理的基本组成部分。
您所描述的是 WinForms 的典型方法,其中实现 UI 和逻辑的真正分离是不可能的,因为应用程序是由挂接到特定控件的事件驱动的。
但是,在 WPF 中,您不使用(或不必使用)事件来实现 UI 与应用程序逻辑之间的通信。值得您研究的主要领域是:
- DataContext
- Binding
非常广泛的概述是 XAML 描述布局并指定布局应从何处获取数据。数据上下文中存在正确的数据,WPF 引擎负责所有连接(或 绑定 )。
<TextBlock Text="{Binding Caption}" />
例如,在上面的代码中,TextBlock
中的 Text
将填充数据上下文中 Caption
属性 中存储的值。 (通常数据上下文在用户控件或用户 window 级别指定。)
在后面的代码中,没有任何与 TextBlock 或用值填充它相关的内容。
后面的代码通常只是DataContext
:
的初始化
public partial class MyUiClass
{
public MyUiClass()
{
this.Loaded += (sender, e) => { this.DataContext = new MyViewModelClass(); }
}
}
所有数据都存储在 class 集合中作为数据上下文(上面示例中的 MyViewModelClass)。
作为下一步,我建议您阅读一些 MVVM 教程(YouTube 上有很多不错的教程)。
我是wpf的新手,有些地方我不明白.. 我到处都在阅读有关代码分离和 UI 的内容。那么它应该如何工作,即使我可以设计混合中的所有内容,我的代码总是对变化做出反应并在其他情况下改变可见性......所以首先没有控件的名称,后面的代码将无法编译...即使我有名字,协调起来也不是很不可能吗?
你说的架构有问题。 您不需要模型数据中的 names of control。模型数据唯一交互的是 events/commands。通过这种方式,您可以将表示和数据分开,其中模型视图是这两者之间的桥梁。
在 "separation of code and UI" 讨论的上下文中,您没有将 Xaml 与代码隐藏分开。相反,您将 logic 与 Xaml 分开,结果将 logic 与 分开还有代码隐藏。
构造 Xaml 控件时,不仅会构造 xaml "view",还会构造初始化控件的后备部分 class。结果,您总是有一个代码隐藏。这是 Xaml 工作原理的基本组成部分。
您所描述的是 WinForms 的典型方法,其中实现 UI 和逻辑的真正分离是不可能的,因为应用程序是由挂接到特定控件的事件驱动的。
但是,在 WPF 中,您不使用(或不必使用)事件来实现 UI 与应用程序逻辑之间的通信。值得您研究的主要领域是:
- DataContext
- Binding
非常广泛的概述是 XAML 描述布局并指定布局应从何处获取数据。数据上下文中存在正确的数据,WPF 引擎负责所有连接(或 绑定 )。
<TextBlock Text="{Binding Caption}" />
例如,在上面的代码中,TextBlock
中的 Text
将填充数据上下文中 Caption
属性 中存储的值。 (通常数据上下文在用户控件或用户 window 级别指定。)
在后面的代码中,没有任何与 TextBlock 或用值填充它相关的内容。
后面的代码通常只是DataContext
:
public partial class MyUiClass
{
public MyUiClass()
{
this.Loaded += (sender, e) => { this.DataContext = new MyViewModelClass(); }
}
}
所有数据都存储在 class 集合中作为数据上下文(上面示例中的 MyViewModelClass)。
作为下一步,我建议您阅读一些 MVVM 教程(YouTube 上有很多不错的教程)。