使用复选框windows商店应用程序c#获取列表视图的选中项目

本文关键字:视图 列表 项目 获取 复选框 windows 应用程序 | 更新日期: 2023-09-27 18:24:41

我正在开发一个Windows商店应用程序。我已经实现了一个列表视图。listview包含图像、文本块和复选框控件。我的listview从互联网上获取数据。我用listview进行了xml解析,并将数据绑定到listview。我想从listview中获取所有数据,其中复选框在listview中被选中。我的xaml代码是:

<ListView Name="display" ItemsSource="{Binding}"   SelectionMode="Single" 
 SelectionChanged="display_SelectionChanged" 
 ScrollViewer.HorizontalScrollMode="Enabled" ScrollViewer.HorizontalScrollBarVisibility="Visible"   
 ItemContainerStyle="{StaticResource ListViewItemStyle12}" >
   <ListView.ItemsPanel>
      <ItemsPanelTemplate>
         <StackPanel x:Name="stak2" Orientation="Horizontal" />
      </ItemsPanelTemplate>
   </ListView.ItemsPanel>
    <ListView.ItemTemplate>
       <DataTemplate>
          <StackPanel Orientation="Vertical">
            <Image Source="{Binding  Path=Image}" Width="450" Tapped="image_taped" />
            <CheckBox Tag="{Binding Path=tag}" Visibility="{Binding Path=visichk}" Height="40"      Name="addremove" 
                HorizontalAlignment="Center" Checked="add_checked" Unchecked="sub_checked"  Opacity="0.5" 
                 Background="White" VerticalAlignment="Top" Template="{StaticResource CheckboxImageTemplate}" >
            </CheckBox>
            <TextBlock Text="{Binding Image_code}" FontSize="25" Foreground="Gray" HorizontalAlignment="Center"  />
          </StackPanel>
       </DataTemplate>
     </ListView.ItemTemplate>
 </ListView>

listview的数据源:

XDocument xmlDoc = XDocument.Parse(responseString);
var Categories = xmlDoc.Descendants("product").ToArray();
List<ProductData> displaylst = new List<ProductData>(); //ProductData is my Class.
foreach (var cat in Categories)
{
    string prId = cat.Elements("id_products").Select(r => r.Value).FirstOrDefault();   
    List<string> Image = cat.Descendants("images").Elements("src").Attributes("largimage").Select(r => r.Value).ToList();
    List<string> Image_code = cat.Descendants("images").Elements("src").Select(r => r.LastAttribute.Value).ToList();
    int i = 0;
    foreach (string img in Image)
    {
        displaylst.Add(new ProductData { Id = prId, Image = img, Image_code = Image_code[i] });
        i++;
    }
}
display.ItemsSource = displaylst;            

现在,单击一个按钮,我想获得产品的数据,如prId、Image、Image_code,其中复选框是从listview中选中的,并将其放入简单列表中。

我怎么能做到这一点?请帮帮我。提前谢谢。

使用复选框windows商店应用程序c#获取列表视图的选中项目

首先让我们向ProductData类添加一个属性

public class ProductData
{
    public string Id { get; set; }
    public string Image { get; set; }
    // I dont know exactly what's in this class
    // ... more properties
    // Add this one
    public bool IsSelected { get; set; }  
}

既然我们的ProductData类中有一个布尔IsSelected,我们就可以知道哪些是被选中的。

在第二个foreach更改此行

// Set IsSelected to false by default
displaylst.Add(new ProductData { IsSelected = false, Id = prId, Image = img, Image_code = Image_code[i] });

并将复选框的"IsChecked"属性绑定到IsSelected

<CheckBox IsChecked="{Binding Path=IsSelected}" Tag="{Binding Path=tag}" Visibility="{Binding Path=visichk}" Height="40"      Name="addremove" 
            HorizontalAlignment="Center" Checked="add_checked" Unchecked="sub_checked"  Opacity="0.5" 
             Background="White" VerticalAlignment="Top" Template="{StaticResource CheckboxImageTemplate}" >

通过绑定,当您选中其中一个复选框时,关联的productData IsSelected属性将自动变为"true"。

所以现在你只需要做一个新的列表,只选择IsSelected为true的ProductData:

List<ProductData> listOfSelectedProducts = (from product in displaylst 
                                            where product.IsSelected == true
                                            select product).ToList();

在这里,您得到了一个只包含选定产品的ProductData列表。