【问题标题】:XAML - ListViewItem - IsEnabled BindingXAML - ListViewItem - IsEnabled 绑定
【发布时间】:2012-10-02 00:13:40
【问题描述】:

请让我摆脱痛苦:

<ListView.ItemContainerStyle>
    <Style TargetType="ListViewItem">
        <Setter Property="IsEnabled" Value="{Binding MyBoolField}" />
    </Style>
</ListView.ItemContainerStyle>

其中MyBoolFieldListView 分配的ItemsSource 中每个项目的可用属性,当然是bool 类型。

所需的行为是每个ListViewItemIsEnabled 属性绑定到它包含的对象的MyBoolField 属性(来自ListViewItemsSource 的一个元素)。然而,上面的例子没有注意这个绑定,总是true

如果我将值静态设置为false,该项目将按预期禁用。

我只能假设这是范围界定问题,或在此特定场景中限制使用绑定,但是我无法找到任何文档来支持这一点。

也许知道在分配给此ListViewItemTemplateDataTemplate 中设置的绑定都可以正常工作,所以问题希望不是那么基本/愚蠢。

评论点

  • 调试“输出”窗口中没有相关输出。
  • 在别处绑定 MyBoolField 属性可以正常工作,因为底层数据源正确提供了布尔值,这似乎只是在此上下文中绑定它的问题。

【问题讨论】:

  • 包含 MyBoolField 的类是否正确实现了 INotifyPropertyChanged?
  • 调试时在 Visual Studio 的输出窗口中检查绑定错误。
  • @Jay 输出窗口中没有错误。
  • @DJ 刚刚做了 - 似乎没有效果。
  • 一般用途可能是 getter 似乎从未在 MyBoolField 上被调用,因此 Setter 似乎不会调用任何绑定。

标签: c# xaml windows-8 microsoft-metro winrt-xaml


【解决方案1】:

好的,阅读this post 似乎它是 WinRT 的一个已知限制,也许你会在那里找到一些有用的东西。 我也会尝试一件事,因为那篇文章中的 OP 说了一些关于它的事情。使用Self 绑定,并使用Path=DataContext.MyBoolField

进一步阅读,这是 Silverlight 的一个限制,WinRT 是在此基础上构建的。所以this 是一种解决方法,它也应该适用于 WinRT

【讨论】:

    猜你喜欢
    • 2015-09-11
    • 2023-03-09
    • 2015-12-30
    • 1970-01-01
    • 1970-01-01
    • 2013-08-04
    • 1970-01-01
    • 2015-05-17
    • 2014-11-05
    相关资源
    最近更新 更多