XAML DataContext 和 ViewModel 类型

4
我在我的应用程序中使用MVVM,控件的DataContext是在我的C#代码中分配的(而不是在XAML中)。
因此,XAML控件不知道其DataContext设置为哪个实例类型。其结果是,在XAML中绑定的属性没有重构支持和智能感知。
有没有办法告诉XAML中的控件它关联了哪个类型的DataContext
这样,当我在ViewModel中修改属性名称或搜索该属性的所有引用时,我希望这些绑定属性在XAML中也被考虑到。
2个回答

3

没有框架支持,你只能告诉VS设计器DataContext的“形状”,这样它就会为属性提供提示。如果你想让你的解决方案更具有重构性,我建议使用Daniel的T4元数据解决方案:

http://www.codeproject.com/KB/codegen/T4Metadata.aspx

这将为你的视图模型生成元数据,你可以在XAML中引用它:

<StackPanel DataContext="{Binding Source={StaticResource Person}}">
   <TextBlock >Name:</TextBlock>
   <TextBox Text="{Binding Path={x:Static Metadata:PersonMetadata.NamePath}}"/>
</StackPanel>

科林·伊


2

不,由于DataContext可以在运行时更改,将其绑定到特定类型就没有意义。


2
虽然这可能是真的,但我有很多情况下一个控件与一个特定的视图模型类型相关联。 - thumbmunkeys
我不同意。在不兼容的类型之间切换DataContext是没有意义的,因为你不知道要绑定什么...即使许多TemplateSelector实现依赖于类型。例如,在Razor中,你可以通过@model指令提供一个类型来获取正确的IntelliSense,而视图的模型默认为dynamic - Oliver Schimmer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接