【问题标题】:Using Visibilty with DataContext doesn't work in Button将 Visibilty 与 DataContext 一起使用在 Button 中不起作用
【发布时间】:2011-03-01 14:29:33
【问题描述】:

我有一个按钮,我试图在其中添加一个绑定到某个路径的可见性属性。在大多数情况下,这条路径将被调用,我返回一个可见性(隐藏或可见)。如果我有一个将 DataContext 设置为不同绑定路径的按钮并尝试添加 Visiblity 内容,则永远不会调用可见性绑定路径。如果我删除 DataContext 那么 Visibilty 工作正常。有什么解决办法吗?为什么会这样?非常感谢。

<Button Visibility="{Binding Path=ThisButtonVisibility}"
        DataContext="{Binding Path=ThisButtonDataContext}"

【问题讨论】:

  • @user565660 您确定按钮的数据上下文设置正确吗?
  • 绑定会在它当前的DataContext中寻找ThisButtonVisibility,所以你的DataContext总是有属性ThisButtonVisibility吗?
  • 您如何决定 DataContext - 它是否有特定的名称或类型?

标签: wpf xaml data-binding datacontext


【解决方案1】:

当您在 Button 上设置 DataContext 并在按钮“内部”的 Databinding 之后进行时,Binding 相对于刚刚设置的 DataContext。因此它会搜索属性 ThisButtonDataContext.ThisButtonVisibility。

通常 Button 会从其父级继承 DataContext,但当您明确设置另一个时,它不会再找到覆盖的 DataContext。

简单地说:数据上下文在元素本身中已经有效,而不仅仅是在其内容中。

那么你可以做什么: 移动对象 ThisButtonDataContext 中的 Visibility 就可以了

【讨论】:

    【解决方案2】:

    将您的绑定更改为

    <Button Visibility="{Binding Path=ThisButtonDataContext.ThisButtonVisibility}"
            DataContext="{Binding Path=ThisButtonDataContext}"
    

    【讨论】:

    • 我试过了,它对我不起作用??我也在尝试绑定按钮的内容并且遇到了同样的问题。有什么想法吗??????????????????
    • @user565660 您的ThisButtonDataContext 是否有一个名为ThisButtonVisibility 的属性? ThisButtonVisibilityUIElement.Visibility 类型的吗?
    • 使用此示例,但仅用于可见性。不要设置 DataContext。
    【解决方案3】:

    绑定使用 DataContext 作为隐式源。所以你的分配是不正确的,因为 Binding 表达式将查找正在绑定到 DataContext 的 DataContext 来查找正在绑定的 DataContext 并且一次又一次地... ;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-10
      • 2019-06-29
      相关资源
      最近更新 更多