【问题标题】:Bind Control to DependancyProperty of container control将控件绑定到容器控件的 DependancyProperty
【发布时间】:2011-09-06 21:30:44
【问题描述】:

我在 Silverlight 中创建了一个 UserControl 并向其添加了一些依赖项属性,以将控件中的选定选项公开给使用我的控件的任何其他控件,如何将我的控件中使用的 ListBox 之类的属性绑定到依赖项我的控件的属性?我目前正在使用 ElementBinding,但我一般不太喜欢 ElementBinding...我希望有某种相对绑定,但相对绑定似乎没有提供我正在寻找的选项(但我没有认为我实际上非常了解相对绑定)

【问题讨论】:

    标签: silverlight binding


    【解决方案1】:

    所以您有一个包含ListBoxUserControl,并且您希望从您的UserControl 中公开您的ListBox 所选项目?

    我能想到几个选项...

    1. 将 UserControl 的“LayoutRoot”的 DataContext 设置为自身,如 in this example,然后您可以将 ListBox.SelectedItem 绑定到您的 UserControl 上的相应属性。
    2. 使用 ReltiveSource FindAncestor 绑定将可视化树从 ListBox 向上导航到 UserControl
    3. 使用ElementName 绑定,方法是为您的UserControl 命名并在您的ListBox 绑定中引用该名称。

    我个人赞成 (1),通常您想要公开的属性不止一个,这使得这是最简单的解决方案。

    【讨论】:

    • 嗨 Colin,我没有提到我正在使用 Silverlight(为其添加了标签),这意味着没有 FindAncestor 等...
    • OK - (1) 和 (3) 仍然适用。但是,您可以在此处找到 FindAncestor 实现:scottlogic.co.uk/blog/colin/2009/02/…
    • 感谢 Colin,3 是我希望避免的(无特殊原因),1 确实给了我一些想法。我实际上希望对此有一个“标准”绑定表达式,例如 WPF 的 FindAncestor。我在明确设置控件的数据上下文时发现的问题是,当您在数据绑定容器控件中使用它们时,您必须再次执行 ElementName 或 Source 绑定,因为控件的 DataContext 与包含控件不同,所以我想在大多数情况下案例 ElementName 绑定是最好的主意。或者我非常不喜欢的自定义绑定助手。
    • 参见 (1) 的链接,您没有将 usercontrols 数据上下文设置为自身,而是设置其布局的根。这可确保您的用户控件的公开属性按预期工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 2018-04-07
    相关资源
    最近更新 更多