简体   繁体   中英

C# UWP: Access a textblock and status of check box inside a listview

Hi I have my list view as follows: ![][1]

<RelativePanel >
    <ListView x:Name="StudentListView"
              IsItemClickEnabled="True" 
              Width="1000"
              ItemClick="Student_ItemClick" >
         <ListView.ItemTemplate>
            <DataTemplate x:Name="ABC">
            <StackPanel 
                 x:Name="ListItemPanel"
                 Orientation="Horizontal"  
                 MaxWidth="500">
                 <TextBlock  x:Name ="uName" Text="{Binding Username}" 
                            Margin="20,0,20,8"
                            FontSize="24" 
                            FontStyle="Italic" 
                            FontWeight="SemiBold"
                            Foreground="DarkBlue" 
                            /> 
                 <CheckBox Name="AttendCheckBox" 
                           HorizontalAlignment="Left"
                           Checked="AttendCheckBox_Checked" 
                           IsChecked="False"></CheckBox>
                   </StackPanel>
               </DataTemplate>
           </ListView.ItemTemplate>
       </ListView>
    <TextBlock Name="queryName" FontSize="20"></TextBlock>

    <Button Name="finishBtn" Content="Finish" RelativePanel.Below="StudentListView" ></Button>
</RelativePanel>

I am trying to access each data item and check if checkbox is checked or not when user clicks on finish button that is on same page as listview . And I am having tough time trying to figure it out. Any hint on it would be great. Thank you

I checked your code. You did not need to use Checked event of CheckBox. Instead, you could declare a bool type property in your custom class and bind IsChecked to it and set Mode=TwoWay , then, once your checkbox's IsChecked value is changed, the source also will be updated. After that, you could filter the source to get the 'IsChecked=True' items.

According to your code snippet, I made a code sample for you reference:

<RelativePanel>
        <ListView x:Name="StudentListView"
              IsItemClickEnabled="True" 
                      Width="1000" Height="500">
        <ListView.ItemTemplate>
            <DataTemplate x:Name="ABC">
                <StackPanel 
                            x:Name="ListItemPanel"
                            Orientation="Horizontal"  
                            MaxWidth="500">
                    <TextBlock  x:Name ="uName" Text="{Binding Username}" 
                                   Margin="20,0,20,8"
                                   FontSize="24" 
                                   FontStyle="Italic" 
                                   FontWeight="SemiBold"
                                   Foreground="DarkBlue"/>
                    <CheckBox Name="AttendCheckBox" HorizontalAlignment="Left"  IsChecked="{Binding IsSelected,Mode=TwoWay}"></CheckBox>
                </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
    <TextBlock Name="queryName" FontSize="20"></TextBlock>

        <Button Name="finishBtn" Content="Finish" RelativePanel.Below="StudentListView" Click="{x:Bind finishBtn_Click}"></Button>
    </RelativePanel>
public sealed partial class MainPage : Page
{

    public ObservableCollection<Test> tests { get; set; }
    public MainPage()
    {
        this.InitializeComponent();
        tests = new ObservableCollection<Test>();
        for (int i=0;i<100;i++)
        {
            tests.Add(new Test() {Username="name "+i });
        }
        StudentListView.ItemsSource = tests;
    }

    private void finishBtn_Click(object sender, RoutedEventArgs e)
    {
        var selectedStudents = tests.Where(x => x.IsSelected == true).ToList();
    }
}
public class Test : INotifyPropertyChanged
{
    private string _Username;
    public string Username
    {
        get { return _Username; }
        set
        {
            if (_Username != value)
            {
                _Username = value;
                RaisePropertyChanged("Username");
            }
        }
    }

    private bool _IsSelected;
    public bool IsSelected
    {
        get { return _IsSelected; }
        set
        {
            if (_IsSelected != value)
            {
                _IsSelected = value;
                RaisePropertyChanged("IsSelected");
            }
        }
    }


    public event PropertyChangedEventHandler PropertyChanged;
    private void RaisePropertyChanged(string PropertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this,new PropertyChangedEventArgs(PropertyName));
        }
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM