【问题标题】:Find XAML Framework Elements Bounded To An Object查找绑定到对象的 XAML 框架元素
【发布时间】:2012-07-14 15:50:54
【问题描述】:

如何查找和访问绑定到 XAML 中的对象的元素?

编辑:假设我有一个EmployeeViewModel 分配给EmployeeViewDataContext 和一个EmployeeModel 在我的EmployeeViewModel 中,我想知道哪些属性我的模型绑定到 View 的框架元素(控件)我也想访问绑定到我的模型属性的每个控件。

【问题讨论】:

  • 请说明您想要达到的目标。提供您要查找的对象样本。
  • 你想要 ViewModel 还是 View 的控件?
  • 您想从您的应用程序代码中执行此操作,还是使用第三方工具?还是打算定制一个?
  • 你想用代码做什么? MVVM 旨在使您的 UI 逻辑和您的应用程序逻辑完全分离,因此您的 EmployeeViewModel 和您的 EmployeeModel 不应引用 UI 组件,例如 ButtonsTextBoxes
  • @Rachel 我知道我应该如何实现 MVVM,这是我尝试做的一个例子,也许我无法清楚自己的问题。我正在尝试为 WPF 和 Silverlight 中的 ValidationSummary 之类的控件创建一个小型验证框架。我只想知道如何在 View 中找到和访问控件绑定和控件。所以我可以根据验证结果改变他们的风格。

标签: c# .net wpf silverlight xaml


【解决方案1】:

更新:鉴于 SaberAmani 澄清的问题是他正试图向他的模型添加验证并显示验证摘要。请参阅下面的链接。

http://msdn.microsoft.com/en-us/magazine/ff714593.aspx

http://codeblitz.wordpress.com/2009/05/12/wpf-validation-summary-control/

http://wpfvalidation.codeplex.com/

http://f10andf11.blogspot.co.uk/2012/02/wpf-validation-summary-control.html


供想要发现Bindings的人参考:

您没有提及您的 XAML 是在 WPF、Silverlight、Metro 还是 Phone7 中(因此您可以做的事情可能会受到更多限制)。

似乎有几种可能的方法可以做你想做的事:

  1. 反射
  2. MarkupObject / MarkupWriter
  3. TypeDescriptor+DependencyPropertyDescriptor
  4. 自定义绑定标记扩展

看看这个链接。

他使用反射并建议这是执行此操作的经典方式......但也提到 MarkupWriter 作为另一种可能性。注意:反射方法不会发现可能有绑定的附加属性。

这里有一些使用 MarkupWriter 的链接...这可以让您发现附加的属性。

相关链接:

【讨论】:

    【解决方案2】:

    您可以使用反射来循环遍历属性并在每个属性上使用 FrameworkElement.GetBindingExpression 来为给定的框架元素构建其所有绑定。

    http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.getbindingexpression

    【讨论】:

    • 一旦有了 BindingExpression,DataItem 就会为您提供 Binding 的来源。如果您需要更多帮助,请详细说明您正在努力实现的目标。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-06
    • 1970-01-01
    • 2011-02-28
    • 2012-03-23
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多