Lấy giá trị của checkbox trong listbox wpf

đây là giao diện xaml của mình


mình muốn khi click vào button kiểm tra thì nó sẽ kiểm tra được checkbox nào dk click để lấy giá trị ra, mình đã thử lấy các giá trị check roi nhưng nó vẫn không làm được, ai biết chỉ mình vs ạ

vì ko dán được code nên mình xin chụp ảnh xaml

code c# public partial class MainWindow : Window { List dsthu = new List(); string str = ""; public MainWindow() { InitializeComponent(); dsthu.Add(new Thu() { name = "Corto", imagePath = "/image/corto.png", namecheck = false });
        dsthu.Add(new Thu() { name = "Emilio", imagePath = "/image/Emilio.png", namecheck = false });
        dsthu.Add(new Thu() { name = "Felipe", imagePath = "/image/Felipe.png", namecheck = false });
        dsthu.Add(new Thu() { name = "Guido", imagePath = "/image/Guido.png", namecheck = false });
        dsthu.Add(new Thu() { name = "Guillermo", imagePath = "/image/Guillermo.png", namecheck = false });
        dsthu.Add(new Thu() { name = "Hippolite", imagePath = "/image/Hippolite.png", namecheck = false });
        dsthu.Add(new Thu() { name = "Juan", imagePath = "/image/Juan.png", namecheck = false });
        dsthu.Add(new Thu() { name = "Lapino", imagePath = "/image/Lapino.png", namecheck = false });
        dsthu.Add(new Thu() { name = "Marco", imagePath = "/image/Marco.png", namecheck = false });
        dsthu.Add(new Thu() { name = "Marguarita", imagePath = "/image/Marguarita.png", namecheck = false });
        dsthu.Add(new Thu() { name = "Milo", imagePath = "/image/Milo.png", namecheck = false });
        dsthu.Add(new Thu() { name = "Ramon", imagePath = "/image/Ramon.png", namecheck = false });
        dsthu.Add(new Thu() { name = "Regina", imagePath = "/image/Regina.png", namecheck = false });
        listsothu.ItemsSource = dsthu;
    }

    private void Btn_check_Click(object sender, RoutedEventArgs e)
    {
        messsagebox.show(str);
      

    }

    private void CheckBox_Checked(object sender, RoutedEventArgs e)
    {
        CheckBox cb = (CheckBox)sender;
       
       if(cb.IsChecked == true)
        {
            foreach (object data in listsothu.SelectedItems)
            {
                str = (data as Thu).name;

            }
        }
       
    }
}

Dùng data Context.

private void CheckBox_Checked(object sender, RoutedEventArgs e) {
    CheckBox cb = (CheckBox)sender; 
    var data = cb.DataContext as Thu;
}

Góp ý thêm.

  1. Cần đảm bảo two way binding hoạt động đúng. (Model phải implement từ INotifyPropertyChanged )
  2. ItemsSource dùng binding với ObservableCollection thay vì gán trực tiếp.
  3. Ngoài ra bạn cần xem lại C# coding convention.
4 Likes

mình ms học wpf nên vẫn chưa chắc về mấy phần đó, nếu bạn có tài liệu nào về wpf dễ hiểu có thể cho mình xin dk ko ạ

Offical doccumentation

2 Likes

Dùng Sender của nó để biết nó đang click vào cái nào.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?