Ich habe ein ListView
Dabei zeigt jede Zeile a CheckBox
und 2 TextBlock
s. 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 № 1Ersetzen 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>