【发布时间】:2012-10-02 00:13:40
【问题描述】:
请让我摆脱痛苦:
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="IsEnabled" Value="{Binding MyBoolField}" />
</Style>
</ListView.ItemContainerStyle>
其中MyBoolField 是ListView 分配的ItemsSource 中每个项目的可用属性,当然是bool 类型。
所需的行为是每个ListViewItem 的IsEnabled 属性绑定到它包含的对象的MyBoolField 属性(来自ListView 的ItemsSource 的一个元素)。然而,上面的例子没有注意这个绑定,总是true。
如果我将值静态设置为false,该项目将按预期禁用。
我只能假设这是范围界定问题,或在此特定场景中限制使用绑定,但是我无法找到任何文档来支持这一点。
也许知道在分配给此ListView 的ItemTemplate 的DataTemplate 中设置的绑定都可以正常工作,所以问题希望不是那么基本/愚蠢。
评论点
- 调试“输出”窗口中没有相关输出。
- 在别处绑定
MyBoolField属性可以正常工作,因为底层数据源正确提供了布尔值,这似乎只是在此上下文中绑定它的问题。
【问题讨论】:
-
包含 MyBoolField 的类是否正确实现了 INotifyPropertyChanged?
-
调试时在 Visual Studio 的输出窗口中检查绑定错误。
-
@Jay 输出窗口中没有错误。
-
@DJ 刚刚做了 - 似乎没有效果。
-
一般用途可能是 getter 似乎从未在 MyBoolField 上被调用,因此 Setter 似乎不会调用任何绑定。
标签: c# xaml windows-8 microsoft-metro winrt-xaml