簡體   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