使用ItemTemplate绑定ListBoxItem的IsEnabled属性

时间:2011-08-16 23:27:24

标签: wpf xaml data-binding windows-phone-7

我有以下ListBox:

<ListBox ScrollViewer.VerticalScrollBarVisibility="Disabled"
         HorizontalAlignment="Stretch"
         HorizontalContentAlignment="Stretch"
         SelectionChanged="ListBoxContainerSelectionChanged"
         ItemsSource="{Binding Movies}"
         ItemContainerStyle="{StaticResource HeaderListBoxItemStyle}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Controls:MoviesItemControl Header="{Binding Title}"
                                        Detail="{Binding FormattedDescription}"
                                        Rating="{Binding Rating}"
                                        Opacity="{Binding IsSuppressed, Converter={StaticResource DimIfTrueConverter}}" 
                                        IsEnabled="{Binding IsSuppressed, Converter={StaticResource InverseBooleanConverter}}"/>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

我正在尝试将ListBoxItem的禁用状态设置为'已抑制'(未找到说明的电影)。我有一个属性,我能够绑定到我的个人控件,但我希望它们不能在实际列表中选择。 (并使用我ItemsContainerStyle中包含的禁用状态)

我已经在使用Trigger的SO上看到了一些实现,但是这似乎在WP7中不可用,我宁愿不必为每个控件创建不同的样式,以便它们正确绑定。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

请参阅以下问题:WP7 - Databind ListboxItem's IsEnabled Property

反过来又与此相关联:Better SetterValueBindingHelper makes Silverlight Setters better-er!

我为David Anson针对此特定情况尝试了SetterValueBindingHelper,效果很好。您所要做的就是将 SetterValueBindingHelper.cs 添加到您的项目中,然后您可以将IsEnabled绑定到这样的setter中

<Style x:Key="HeaderListBoxItemStyle" TargetType="ListBoxItem">
    <Setter Property="delay:SetterValueBindingHelper.PropertyBinding">
        <Setter.Value>
            <delay:SetterValueBindingHelper Property="IsEnabled"
                                            Binding="{Binding IsSuppressed}"/>
        </Setter.Value>
    </Setter>
</Style>