查找所有视图 - viewmodel绑定

时间:2018-01-29 11:57:44

标签: xaml mvvm view binding viewmodel

目前我找到XAML视图绑定的方式是单击XAML诊断工具(屏幕顶部的小黑条) - >选择控件 - >在代码中看到它的属性 - >请参阅“DataContext”属性。

通过这种方式,您可以找到哪个viewmodel绑定到哪个视图,但这是一个非常缓慢的过程。

我正在寻找一种方法来查找所有当前绑定的视图 - 视图模型对。这显然只能在运行时工作,但那没关系。 一段代码,一个nuget扩展或任何东西都会这样做会给我一个绑定列表。 谢谢!

1 个答案:

答案 0 :(得分:0)

我认为反思可以带给你很长的路。

使用此方法迭代输出目录中的文件。并找到所有程序集

Directory.GetFiles()

https://msdn.microsoft.com/en-us/library/07wt70x2.aspx

然后加载程序集并查找正确的类。

Assembly SampleAssembly;
SampleAssembly = Assembly.LoadFrom("c:\\Sample.Assembly.dll");

https://msdn.microsoft.com/en-us/library/system.reflection.assembly.gettypes.aspx

使用TypeDescriptor获取更近的信息

ICustomTypeDescriptor typeDescriptor = dataContext as ICustomTypeDescriptor;

https://msdn.microsoft.com/en-us/library/system.componentmodel.typedescriptor.aspx

找出基础类型。

这可能是我头脑中的步骤。 由于powershell也可以访问dotnet类,因此可以是输出所需信息的脚本,也可以在VisualStudio中执行。

但是......你也可以介绍一些惯例。我见过的大多数项目都有相同的命名模式。 CustomerView - > CustomerViewModel。这也适用于组件OrderTableRowView - > OrderTableRowViewModel。有了这个,你总能知道哪个ViewModel属于哪个视图(或视图的一部分)。

顺便说一句:如果你有这么复杂的结构,那么多ViewsViewModels就可以考虑像服务这样的对象和ViewModel。有时称为ViewModelLocatorService。这样可以集中查看View和ViewModel之间的连接。

HTH;)