繁体   English   中英

C#UWP:访问列表视图中的文本块和复选框状态

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

嗨,我的列表视图如下:![] [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>

我试图访问每个数据项,并检查当用户单击与listview在同一页面上的完成按钮时,是否选中了复选框。 而且我很难解决这个问题。 关于它的任何提示都会很棒。 谢谢

我检查了您的代码。 您不需要使用CheckBox的Checked事件。 相反,您可以在自定义类中声明bool type属性,并将IsChecked绑定到它,并设置Mode=TwoWay ,然后,一旦复选框的IsChecked值更改,源代码也将被更新。 之后,您可以过滤源以获取“ IsChecked = True”项。

根据您的代码片段,我制作了一个代码示例供您参考:

<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));
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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