使 ListView 项目选择表单 ItemSsource

Posted

技术标签:

【中文标题】使 ListView 项目选择表单 ItemSsource【英文标题】:Make ListView Item Selected Form ItemSource 【发布时间】:2020-09-08 14:04:46 【问题描述】:

我有一个这样的 ListView

<ListView x:Name="lview" SelectionMode="Multiple">
    <ListView.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="Binding Name, Mode=OneWay" />
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

我正在像这样将数据绑定到这个 Listview

public MainPage()

    this.InitializeComponent();
    ObservableCollection<OptionItem> io = new ObservableCollection<OptionItem>();
    io.Add(new OptionItem  Name = "11111111111", IsSelected=false );
    io.Add(new OptionItem  Name = "22222222222", IsSelected=true );
    io.Add(new OptionItem  Name = "33333333333", IsSelected=true );
    io.Add(new OptionItem  Name = "44444444444",IsSelected=false );

    lview.ItemsSource = io;
   

现在您可以在我的模型中看到,我有一个名为 IsSelected 的属性。如何将它绑定到 listView,以便在 ItemsSource 中选择的项目与在 ListView 中选择的一样?

【问题讨论】:

【参考方案1】:

根据您希望选择发生的时间,订阅ListView 的事件,您可以在其中将选定的OptionItems 添加到选定项目列表中:

代码

private void Lview_SizeChanged(object sender, SizeChangedEventArgs e)

    var listView = sender as ListView;
    foreach (OptionItem item in listView.Items)
    
        if (item.IsSelected)
        
            listView.SelectedItems.Add(item);
        
    

XAML

<ListView x:Name="lview" SelectionMode="Multiple" SizeChanged="Lview_SizeChanged">
    <ListView.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="Binding Name, Mode=OneWay" />
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

无论如何,您可能想考虑使用像MVVM 这样的模式,因为这将使您的代码(到目前为止!)更具可读性和更易于维护。

【讨论】:

以上是关于使 ListView 项目选择表单 ItemSsource的主要内容,如果未能解决你的问题,请参考以下文章

如何使 Qt Quick (QML) ListView 项目无法选择?

无法使我的 ListView 可选择,按下该元素不会突出显示

ListView,如何使元素居中

如何强制 ListView 忽略单击/不突出显示单击的项目?

如何隐藏 ListView 列标题?

使 ListView.ScrollIntoView 将项目滚动到 ListView 的中心(C#)