如果是这样,我应该如何将Visibility绑定到ListViewItem的IsSelected属性?
答案 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;
}
}