ListView控件是否在UWP中具有IsSelected属性

时间:2017-04-29 15:08:22

标签: c# uwp-xaml listviewitem

如果是这样,我应该如何将Visibility绑定到ListViewItem的IsSelected属性?

1 个答案:

答案 0 :(得分:0)

  

ListViewItem类为ListView控件中显示的项提供容器。通过将对象直接添加到其Items集合或将其ItemsSource属性绑定到数据源来填充ListView。将项目添加到ListView时,会自动为集合中的每个项目创建一个ListViewItem容器。

有关详细信息,请参阅Remark of the ListViewItem

我们应该能够使用SelectionChangedEventArgs.AddedItems来获取包含所选项目的列表。我们还可以使用SelectionChangedEventArgs.RemovedItems来获取包含未选中项目的列表。

我们可以在Class中定义IsSelected属性,Class应该继承INotifyPropertyChanged。在SelectionChanged事件中,我们可以将Selected Item和UnSelect Item设置为Item的IsSelected属性。

例如:

public class Item : INotifyPropertyChanged
{
    private string _title;
    private bool _isSelected;

    public string Title
    {
        get { return _title; }
        set
        {
            _title = value;
            RaisePropertyChanged("Title");
        }
    }

    public bool IsSelected
    {
        get { return _isSelected; }
        set
        {
            _isSelected = value;
            RaisePropertyChanged("IsSelected");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected void RaisePropertyChanged(string name)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(name));
        }
    }
}

然后我们可以将Visibility绑定到IsSelected而不转换类型。

例如:

<ListView Name="MyListView" SelectionChanged="MyListView_SelectionChanged">
    <ListView.ItemTemplate>
        <DataTemplate>
            <TextBlock  Text="{Binding Title}"  Visibility="{Binding IsSelected, Mode=OneWay}"></TextBlock>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

背后的代码:

private ObservableCollection<Item> Items;

public MainPage()
{
    this.InitializeComponent();
    Items = new ObservableCollection<Item>();
    Items.Add(new Item());
    Items[0].Title = "Title1";
    Items.Add(new Item());
    Items[1].Title = "Title2";
    MyListView.ItemsSource = Items;
}

private void MyListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    foreach (Item item in e.RemovedItems)
    {
        item.IsSelected = false;
    }

    foreach (Item item in e.AddedItems)
    {
        item.IsSelected = true;
    }
}