ListView通过DataTrigger更改CheckBox可见性

时间:2013-06-14 04:59:41

标签: wpf listview

我有ListView,其中每行显示CheckBox和2 TextBlock s。 它绑定到ObservableCollection,其中每个项都有一个IsDuplicate属性。 所有数据绑定都有效,我有一个DataTrigger,当属性为true时,整行变成红色。这很有效。

我的问题是: 除了将行变为红色之外,我还想在IsDuplicate为真时更改Visibility(但仅限CheckBox)的CheckBox属性。

以下代码将该行变为红色,但CheckBox Visibility保持不变。 我在setter上尝试了TargetName,但是我收到错误告诉我“无法在样式设置器上设置TargetName属性。”

当IsDuplicate为true时,如何才能实现CheckBox Visibility属性设置为Hidden

<ListView ItemsSource="{Binding Tasks}" IsSynchronizedWithCurrentItem="True" SizeChanged="ListViewSizeChanged" Loaded="ListViewLoaded" >
<ListView.ItemContainerStyle>
    <Style TargetType="{x:Type ListViewItem}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding IsDuplicate}" Value="True">
                <Setter Property="Foreground" Value="Red"/>
                <Setter Property="CheckBox.Visibility" Value="Collapsed" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
</ListView.ItemContainerStyle>
<ListView.View>
    <GridView>
        <GridView.Columns>
            <GridViewColumn Width="30" >
                <GridViewColumn.CellTemplate>
                    <DataTemplate x:Name="Checker" >
                        <CheckBox IsChecked="{Binding IsSelected}" />
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
            <GridViewColumn Width="160" Header="File" >
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding FileName}" />
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
            <GridViewColumn Width="260" Header="URL" >
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding VideoUrl}" />
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
            <GridViewColumn Width="300" Header="Download URL" >
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding DownloadUrl}" />
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
        </GridView.Columns>
    </GridView>
</ListView.View>

1 个答案:

答案 0 :(得分:2)

使用以下内容替换DataTemplate的{​​{1}}。这应该是诀窍:

CheckBox