ListViewItem使用索引更改文本颜色

时间:2016-09-12 11:53:06

标签: c# wpf mvvm

我想创建一个播放列表。

但是我有一个问题是突出显示用户指示的所选项目并更改背景颜色或现在播放的文本项目的颜色。

我要展示的属性 - 现在播放的内容(int IndexToPlay)用户选择的内容(SelectedIndex

用户应该只选择一个项目

我使用WPF,MVVM,我阅读了很多帖子,但遗憾的是我还没有找到解决方案。

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

1 个答案:

答案 0 :(得分:0)

如果ViewModel类中有IsSelected和IsPlaying属性:

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();
        }
    }
}

您可以将ItemContainerStyle设置为绑定IsSelected属性,然后您可以使用ItemTemplate上的样式和DataTrigger来更改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>