我是WPF和MVVM的新手,实际上是在一周后开始的,我正在尝试使用WPF和MVVM编写应用程序,同时编写一个示例,我遇到了以下声明<vm:SimpleViewModel x:Key="viewModel"/>,我试图推理它.我理解'x:'是指什么,它是XAML文件中提到的默认XAML命名空间,我为自己的ViewModel类创建了一个命名空间,UI将与之交互,我给它一个别名"vm"和SimpleViewModel是我的应用程序的ViewModel,该语句仅供参考xmlns:vm="clr-namespace:MVVM_Tutorial".
我对该语句的推理<vm:SimpleViewModel x:Key="viewModel"/>是,Window是一个XAML元素,并且有一个资源字典,它引用它来解析并引用某些元素,因此在它的资源字典中,在"x:"命名空间中定义了一个名为"Key",其值是"vm:"命名空间中定义的SimpleViewModel类.只是想知道我的理由是否正确,或者是否有我遗漏的东西,并且想知道从这里继续进一步.
小智 5
XAML只是描述对象图的标记.代码也是描述对象图的标记.我可以这么说
var window = new Window();
window.DataContext = new MyNamespace.MyViewModel();
Run Code Online (Sandbox Code Playgroud)
或者我可以写出完全相同的东西
<Window xmlns:blahblah="clr-namespace:Normal.Xmlns.Deleted.For.Brevity"
xmlns:this="clr-namespace:MyNamespace">
<Window.DataContext>
<this:MyViewModel />
<!-- snip -->
Run Code Online (Sandbox Code Playgroud)
可以在代码中实例化的任何对象都可以在xaml中使用.有一些限制(例如,没有参数的默认公共构造函数),但在大多数情况下这是正确的.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 -->
Run Code Online (Sandbox Code Playgroud)
XAML是XML的子集,它使用XML命名空间映射到当前或其他程序集中的代码名称空间.这是框架如何知道MyViewModel引用的对象.要了解更多信息,请阅读msdn上的此链接.
| 归档时间: |
|
| 查看次数: |
1023 次 |
| 最近记录: |