2016-09-12 2 views
0

Ich möchte eine Playlist erstellen.ListViewItem Textfarbe ändern mit Index

Aber ich habe ein Problem, markieren Sie das ausgewählte Element durch den Benutzer angezeigt und ändern Sie die Hintergrundfarbe oder die Farbe des Textelements, das jetzt abgespielt wird. zeigen

Eigenschaften ich will - was jetzt spielen (int IndexToPlay), welcher Benutzer wählt (SelectedIndex)

sollte der Benutzer nur ein Element

ich WPF verwenden, MVVM, und ich lese viel Beiträge, aber leider habe ich keine Lösung gefunden.

<ListView Name="List" 
    Grid.ColumnSpan="11" Margin="7,0,7,0.4" Grid.Row="9" 
    ItemsSource="{Binding MusicList, UpdateSourceTrigger=PropertyChanged}" 
    SelectedIndex="{Binding SelectedIndex}" 
    > 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Name, UpdateSourceTrigger=PropertyChanged}" /> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

Antwort

0

Wenn Sie IsSelected und isPlaying Eigenschaften in Ihrem Viewmodel Klasse:

public class MusicItem 
{ 
    private bool _isPlaying; 
    public bool IsPlaying 
    { 
     get 
     { 
      return _isPlaying; 
     } 
     set 
     { 
      _isPlaying = value; 
      OnPropertyChanged(); 
     } 
    } 

    private bool _isSelected; 
    public bool IsSelected 
    { 
     get { return _isSelected; } 
     set 
     { 
      _isSelected = value; 
      OnPropertyChanged(); 
     } 
    } 
} 

können Sie die ItemContainerStyle stellen Sie die IsSelected Eigenschaft zu binden, und dann können Sie einen Stil auf dem ItemTemplate mit einem Datatrigger verwenden, um Ändern Sie das Aussehen des ItemTemplate:

<ListView Name="List" 
    ItemsSource="{Binding MusicList, UpdateSourceTrigger=PropertyChanged}" 
    SelectedIndex="{Binding SelectedIndex}"> 
    <ListView.ItemContainerStyle> 
     <Style TargetType="ListViewItem"> 
      <Setter Property="IsSelected" Value="{Binding Path=IsSelected, Mode=TwoWay}"/> 
     </Style> 
    </ListView.ItemContainerStyle> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Name, UpdateSourceTrigger=PropertyChanged}"> 
       <TextBlock.Style> 
        <Style TargetType="TextBlock"> 
         <Style.Triggers> 
          <DataTrigger Binding="{Binding IsPlaying}" Value="True"> 
           <Setter Property="Foreground" Value="Red"/> 
          </DataTrigger> 
          <DataTrigger Binding="{Binding IsSelected}" Value="True"> 
           <Setter Property="Background" Value="Blue"/> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
       </TextBlock.Style> 
      </TextBlock> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView>