为了账号安全,请及时绑定邮箱和手机立即绑定

如何获取与列表视图数据模板中存在的复选框关联的值?

如何获取与列表视图数据模板中存在的复选框关联的值?

C#
蝴蝶不菲 2023-09-09 16:31:16
我正在尝试获取“选定”复选框的值/内容,以便我可以使用它从后端的 sqlite 数据库获取数据。但我无法从列表视图中获取复选框的值。这是列表视图 -<ListView x:Name="listview" Background="Azure" SelectionMode="Multiple"         ItemsSource="{Binding Strings}" RenderTransformOrigin="0.5,0.5" Width="343">    <ListView.ItemTemplate>        <DataTemplate x:Name="datatemplate">            <CheckBox x:Name="CheckBoxZone" IsChecked="{Binding RelativeSource={RelativeSource AncestorType=ListViewItem},Path=IsSelected}"                        Content="{Binding que_text}" Margin="0,5,0,0"/>        </DataTemplate>    </ListView.ItemTemplate></ListView><Button  Style="{StaticResource ResourceKey=button_style }" x:Name="addToSurvey" Content="Add" Click="AddToSurvey_Click" />这是函数-private void AddToSurvey_Click(object sender, RoutedEventArgs e){    //foreach (var item in listview.SelectedItems)    for (int i=0;i< listview.SelectedItems.Count;i++)    {        string que = listview.Items[i].ToString(); //did not work    }}这是问题课 -public class Questions{    public int que_id { get; set; }    public string que_text { get; set; }}该复选框包含 que_text 值,我需要检索该值以从数据库获取 que_id。
查看完整描述

1 回答

?
holdtom

TA贡献1805条经验 获得超10个赞

在 WPF 中,我们使用所谓的 MVVM。我们不会像在 winforms 中那样去查看 ListViewItem 控件,而是将所需信息的属性放在视图模型类上,并且使用绑定来告诉 UI 如何更新视图模型类,反之亦然。


因此,我们将向 Question 添加 IsSelected 属性。我们还将将该类从Questions重命名为Question,问题集合现在将命名Questions为Strings。


public class Question

{

    public int ID { get; set; }

    public string Text { get; set; }

    public bool IsSelected { get; set; }

}

这是您的列表视图。我们将 CheckBox.IsSelected 绑定到 ListViewItem.IsSelected,因此用户只需单击项目上的任意位置即可检查它们。然后我们将 Question.IsSelected 绑定到 ItemContainerStyle 中的 ListViewItem.IsSelected。


<ListView 

    x:Name="listview" 

    Background="Azure" 

    SelectionMode="Multiple"

    ItemsSource="{Binding Questions}" 

    >

    <ListView.ItemTemplate>

        <DataTemplate>

            <CheckBox 

                IsChecked="{Binding RelativeSource={RelativeSource AncestorType=ListViewItem}, Path=IsSelected}"

                Content="{Binding Text}" Margin="0,5,0,0"

                />

        </DataTemplate>

    </ListView.ItemTemplate>

    <ListView.ItemContainerStyle>

        <Style TargetType="ListViewItem">

            <Setter Property="IsSelected" Value="{Binding IsSelected}" />

        </Style>

    </ListView.ItemContainerStyle>

</ListView>

以下是我们如何处理该事件处理程序中选定的问题。我猜测您的Strings收藏是 Window 或您拥有的任何视图的成员;如果情况并非如此,请告诉我,我们将找出解决办法。请记住,我们Questions现在调用该集合。


private void AddToSurvey_Click(object sender, RoutedEventArgs e)

{

    string allQuestionsText = "";


    foreach (var question in Questions.Where(q => q.IsSelected))

    {

        //  I don't know what you really want to do in here, but it sounds like you do. 

        allQuestionsText += question.Text + "\n";

    }

}


查看完整回答
反对 回复 2023-09-09
  • 1 回答
  • 0 关注
  • 79 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信