/ / ListView CheckBox-Sichtbarkeit über DataTrigger ändern - wpf, Listenansicht

ListView ändert die Sichtbarkeit der CheckBox über DataTrigger - wpf, listview

Ich habe ein ListView Dabei zeigt jede Zeile a CheckBox und 2 TextBlocks. Es ist gebunden an ObservableCollection Dabei hat jedes Element eine IsDuplicate-Eigenschaft. Alle Datenbindung funktioniert und ich habe eine DataTrigger Das wird die gesamte Zeile rot, wenn die Eigenschaft wahr ist. Das funktioniert.

Mein Problem ist folgendes: Ich möchte nicht nur die Linie rot machen, sondern auch die ändern Visibility Eigentum der CheckBox (aber nur die CheckBox), wenn IsDuplicate wahr ist.

Der folgende Code färbt die Linie rot, aber die CheckBox Visibility bleibt unverändert. Ich habe es versucht TargetName Auf dem Setter wird jedoch eine Fehlermeldung angezeigt, die besagt, dass die TargetName-Eigenschaft für einen Style Setter nicht festgelegt werden kann.

Wie kann ich das nur erreichen? CheckBox Visibility Eigenschaft wird festgelegt auf Hidden Wann ist IsDuplicate wahr?

<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>

Antworten:

2 für die Antwort № 1

Ersetzen Sie Ihre DataTemplate für die CheckBox mit den folgenden. Das sollte den Trick machen:

<DataTemplate>
<CheckBox IsChecked="{Binding IsSelected}" >
<CheckBox.Style>
<Style TargetType="CheckBox">
<Style.Triggers>
<DataTrigger Binding="{Binding IsDuplicate}" Value="True">
<Setter Property="Visibility" Value="Hidden" />
</DataTrigger>
</Style.Triggers>
</Style>
</CheckBox.Style>
</CheckBox>
</DataTemplate>