<vm:SimpleViewModel x:Key="viewModel"/> 在 WPF 中是什么意思?
What does the <vm:SimpleViewModel x:Key="viewModel"/> mean in WPF?
我是 WPF 和 MVVM 的新手,实际上一周前才开始,我正在尝试使用 WPF 和 MVVM 编写应用程序代码,在编写示例时我遇到了以下语句 <vm:SimpleViewModel x:Key="viewModel"/>
我正在尝试推理。我明白 'x:' 指的是什么,它是 XAML 文件中提到的默认 XAML 命名空间,我已经为我自己的 ViewModel class 创建了一个命名空间 UI 将与之交互,我给它起了一个别名 "vm" 并且 SimpleViewModel 是我的应用程序的 ViewModel,供参考的声明是 xmlns:vm="clr-namespace:MVVM_Tutorial"
.
我对声明 <vm:SimpleViewModel x:Key="viewModel"/>
的推理是 Window 是一个 XAML 元素并且有一个资源字典,它引用解析并引用某些元素,因此在其内部在 "x:" 命名空间中定义的资源字典,我们正在分配一个名为 "Key" 的变量,其值是在 "vm:" 命名空间中定义的 SimpleViewModel class。只是想知道我的推理是否正确,或者是否有我遗漏的东西,想知道从这里进一步进行。
我相信其他人可以插话进行更多说明...
在xaml文件中,
的引用
"xmlns:[something]="clr-名称space:[你的项目或库]".
由于您的代码隐藏可能很冗长,包含长名称 space 引用,并且您的解决方案可能由多个项目(例如不同的 DLL)组成,因此在处理 XAML 时,它使用 "xmlns" 作为对任何 "yourProjectOrLibrary" 的引用......在你的情况下 project/class "MVVM_Tutorial".
现在,"vm"。这只是 xaml 中的一个 "alias",所以任何时候它都引用了一个
xaml 知道从哪里获得控件、属性、类型等的解析
至于 "x:Key" 部分...不是积极的,但当我第一次构建自定义主题时,也 运行 对 x:Key 感到困惑。我对此的解释是 x:Key 就像一个私人参考,但是通过命名 ..x:Key="viewModel"... 使这个 "name" 可用稍后在 xaml 文件中。
此 "key" 稍后可以在 xaml 中引用...例如,
<ControlTemplate x:Key="CTButton" TargetType="{x:Type Button}" >
<!-- Start border of button to have a rounded corners -->
</ControlTemplate>
然后在主题的后面,我可以参考这个 "Key"... 在我的例子中 "CTButton"。因此,如果我希望多个控件使用/派生自同一个控件模板,我可以让它们引用它...
<someControl>
<Style>
<Setter Property="Template" Value="{StaticResource CTButton}" />
</Style>
</someControl
同样,我对所有 xaml 标记都不太了解,但希望能为您澄清这一点。
XAML 只是描述对象图的标记。代码也是描述对象图的标记。我可以这么说
var window = new Window();
window.DataContext = new MyNamespace.MyViewModel();
或者我可以像这样写完全相同的东西
<Window xmlns:blahblah="clr-namespace:Normal.Xmlns.Deleted.For.Brevity"
xmlns:this="clr-namespace:MyNamespace">
<Window.DataContext>
<this:MyViewModel />
<!-- snip -->
任何可以在代码中实例化的对象都可以在xaml中使用。有一些限制(例如,没有参数的默认 public 构造函数),但在大多数情况下这是正确的。 XAML 只是定义了一个在运行时反序列化的对象图。
由于可以在 xaml 中引用任何类型,假设您可以将 MyViewModel
的实例移至资源字典并通过 StaticResource 或 DynamicResource 引用它。请注意,您放入资源字典中的任何内容都必须有一个键,通过 x:Key:
分配
<Window xmlns:blahblah="clr-namespace:Normal.Xmlns.Deleted.For.Brevity"
xmlns:this="clr-namespace:MyNamespace"
DataContext="{DynamicResource lolderp}">
<Window.Resources>
<this:MyViewModel x:Key="lolderp" />
<!-- snip -->
XAML 是 XML 的子集,并使用 XML 命名空间映射到当前或其他程序集中的代码命名空间。这就是框架如何知道 MyViewModel 引用的对象的方式。要了解更多信息,read this link on msdn.
我是 WPF 和 MVVM 的新手,实际上一周前才开始,我正在尝试使用 WPF 和 MVVM 编写应用程序代码,在编写示例时我遇到了以下语句 <vm:SimpleViewModel x:Key="viewModel"/>
我正在尝试推理。我明白 'x:' 指的是什么,它是 XAML 文件中提到的默认 XAML 命名空间,我已经为我自己的 ViewModel class 创建了一个命名空间 UI 将与之交互,我给它起了一个别名 "vm" 并且 SimpleViewModel 是我的应用程序的 ViewModel,供参考的声明是 xmlns:vm="clr-namespace:MVVM_Tutorial"
.
我对声明 <vm:SimpleViewModel x:Key="viewModel"/>
的推理是 Window 是一个 XAML 元素并且有一个资源字典,它引用解析并引用某些元素,因此在其内部在 "x:" 命名空间中定义的资源字典,我们正在分配一个名为 "Key" 的变量,其值是在 "vm:" 命名空间中定义的 SimpleViewModel class。只是想知道我的推理是否正确,或者是否有我遗漏的东西,想知道从这里进一步进行。
我相信其他人可以插话进行更多说明...
在xaml文件中,
的引用"xmlns:[something]="clr-名称space:[你的项目或库]".
由于您的代码隐藏可能很冗长,包含长名称 space 引用,并且您的解决方案可能由多个项目(例如不同的 DLL)组成,因此在处理 XAML 时,它使用 "xmlns" 作为对任何 "yourProjectOrLibrary" 的引用......在你的情况下 project/class "MVVM_Tutorial".
现在,"vm"。这只是 xaml 中的一个 "alias",所以任何时候它都引用了一个
xaml 知道从哪里获得控件、属性、类型等的解析
至于 "x:Key" 部分...不是积极的,但当我第一次构建自定义主题时,也 运行 对 x:Key 感到困惑。我对此的解释是 x:Key 就像一个私人参考,但是通过命名 ..x:Key="viewModel"... 使这个 "name" 可用稍后在 xaml 文件中。
此 "key" 稍后可以在 xaml 中引用...例如,
<ControlTemplate x:Key="CTButton" TargetType="{x:Type Button}" >
<!-- Start border of button to have a rounded corners -->
</ControlTemplate>
然后在主题的后面,我可以参考这个 "Key"... 在我的例子中 "CTButton"。因此,如果我希望多个控件使用/派生自同一个控件模板,我可以让它们引用它...
<someControl>
<Style>
<Setter Property="Template" Value="{StaticResource CTButton}" />
</Style>
</someControl
同样,我对所有 xaml 标记都不太了解,但希望能为您澄清这一点。
XAML 只是描述对象图的标记。代码也是描述对象图的标记。我可以这么说
var window = new Window();
window.DataContext = new MyNamespace.MyViewModel();
或者我可以像这样写完全相同的东西
<Window xmlns:blahblah="clr-namespace:Normal.Xmlns.Deleted.For.Brevity"
xmlns:this="clr-namespace:MyNamespace">
<Window.DataContext>
<this:MyViewModel />
<!-- snip -->
任何可以在代码中实例化的对象都可以在xaml中使用。有一些限制(例如,没有参数的默认 public 构造函数),但在大多数情况下这是正确的。 XAML 只是定义了一个在运行时反序列化的对象图。
由于可以在 xaml 中引用任何类型,假设您可以将 MyViewModel
的实例移至资源字典并通过 StaticResource 或 DynamicResource 引用它。请注意,您放入资源字典中的任何内容都必须有一个键,通过 x:Key:
<Window xmlns:blahblah="clr-namespace:Normal.Xmlns.Deleted.For.Brevity"
xmlns:this="clr-namespace:MyNamespace"
DataContext="{DynamicResource lolderp}">
<Window.Resources>
<this:MyViewModel x:Key="lolderp" />
<!-- snip -->
XAML 是 XML 的子集,并使用 XML 命名空间映射到当前或其他程序集中的代码命名空间。这就是框架如何知道 MyViewModel 引用的对象的方式。要了解更多信息,read this link on msdn.