【发布时间】:2011-12-27 04:13:45
【问题描述】:
我目前有一个简单的类来保存各种形式的数据,我将它称为MyData 就这个问题的目的。该类通常在容器的资源部分下的 xaml 中创建。它目前有一个名为Show 的DependencyProperty,表示它的数据是否应该在UI 中可见。此资源的常见用途是模板化TextBlock 以显示数据并使用转换器将Show 绑定到其Visibility。 Show 本身的值通常来自另一个 DependencyProperty(通常在用于 MVVM 实现的 ViewModel 中)。我有一个如下所示的示例。
<navigation:Page.Resources>
<ViewModel x:Name="MyModel"/>
<MyData Data="Some Sample Data" Show="{Binding ModelValue, ElementName=MyModel}"/>
<DataTemplate>
<TextBlock Text={Binding Data} Visibility="{Binding Show, Converter={StaticResource BoolToVisibilityConverter}}"/>
</DataTemplate>
</navigation:Page.Resources>
上面的场景显然是我当前工作的简化版本,但它目前运行良好。但是,我需要允许多个绑定来影响数据的可见性。为了澄清,当且仅当所有值都为真时,才应显示数据。因此,上面的 MyData xaml 看起来更像这样:
<MyData Data="Some Sample Data">
<MyData.Show>
<AnotherClass Value="{Binding ModelValue1, ElementName=MyModel}"/>
<AnotherClass Value="{Binding ModelValue2, ElementName=MyModel}"/>
</MyData.Show>
</MyData>
我的第一个想法是让Show 成为ObservableCollection<bool>,但它不会跟踪其项目的值是否发生变化,只有当项目本身发生变化时。例如,当“ModelValue1”从 true 变为 false 时,不会引发集合的 CollectionChanged 事件。所以,我需要一种方法来利用多个绑定来确定某些东西的可见性。
我意识到这是一个相当长的问题,但它有点复杂,所以我试着尽可能详细。请随时要求我澄清任何事情。
【问题讨论】:
标签: c# data-binding binding silverlight-4.0