如何获取Windows Phone应用程序中的复选框内容?

我正在开发Windows手机应用程序。在应用程序中,我想放多个复选框。我可以放多个复选框。但当我选中复选框时,我想获取其内容(复选框内容)。为此我使用检查事件,也点击事件,但我不能得到我想要的结果。我的xaml代码如下:

          

请帮我 …

我认为您根据其目的不正确使用Checkbox

Checkbox应表示关于主题的状态(例如,是/否)。 仍然,您必须在Checked复选框时使用Checked事件,否则使用Unchecked

因此,在Checked事件中,获取您希望的内容。

编辑

你必须以某种方式使用MVVM模式来维护它。 为此,互联网上有很多例子,我相信你能解决这个问题。

而不是使用Click="CheckBox_Click" ,使用Check事件:

 private void CheckBox_Checked (Object sender, EventArgs e) { var currentCheckBoxItem = sender as CheckBox; if (currentCheckBoxItem.IsChecked == true) { //you manipulation here... } } 

仍然。 这可能不起作用,因为您没有提供足够的细节。

编辑2一点MVVM ……

首先,使用单个字符串属性创建一个Hobby模型类(稍后您可能会改变主意添加更多属性,Idk):

 public class Hobby : INotifyPropertyChanged { private string _name; public string Name { get { return _name; } set { _name = value; OnPropertyChanged(); } } private bool _isSelected; public bool IsSelected { get { return _isSelected; } set { _isSelected = value; OnPropertyChanged(); } } //You can add some multiple properties here (***) public Hobby (string hobbyName, bool isSelected) { Name = hobbyName; IsSelected = isSelected; } //INotifiyPropertyChanged interface member implementation ... } 

*例如,简短描述然后将其绑定在View上。 这种MVVM模式的主要优点是逻辑分离,因此如果必须更改某些内容,则每个组件的分离会使其更容易。

二,创建一个ViewModel类(你应该实现INotifyPropertyChanged接口):

 public class HobbiesViewModel : INotifyPropertyChanged { private ObservableCollection _hobbies; public ObservableCollection HobbiesCollection { get { return _hobbies; } set { _hobbies = value; OnPropertyChanged(); } } //Constructor public HobbiesViewModel { HobbiesCollection = new ObservableCollection(); } //INotifyPropertyChanged interface member implementation ... } 

第三,创建ViewModel的实例(ObservableCollection)。 使用此快速帮助:在App.xaml.cs ,创建一个静态对象并在需要时通过应用程序使用它:

 public partial class App { //This already exists in your app's code, but I've written it to //make an idea where to write the Hobbies object public static PhoneApplicationFrame RootFrame { get; private set; } public static HobbiesViewModel Hobbies; //Again, the already existing constructor public App() { ... Hobbies = new HobbiesViewModel(); } 

现在,你几乎已经完成了所有设置; 你有Model,你有ViewModel,剩下的就是创建与View的连接。 这可以通过绑定轻松完成。 ViewModel表示控件的DataContext (在您的情况下为LongListSelector ,因此在View的(Page)构造函数中,编写以下语句:

 yourListControlName.DataContext = App.Hobbies; 

现在绑定是唯一剩下的东西。 这是在XAML代码中完成的。 我不会在这里放一大块XAML代码,因为你最了解控件的外观。 不过,根据您提供的简短样本判断,仅进行一些调整:

列表XAML控件的项源将绑定到表示控件的DataContextViewModelObservableCollection对象名。 有点模糊,对吧? 为了更清楚,在这种情况下,您需要编写ItemsSource="{Binding HobbiesCollection}"ObservableCollection 。 此外,在模板中,您应该具有绑定在Model的属性上的CheckBox

   //StackPanel is kinda useless if you have //only one child control in it. But I wrote //according to your code.    

现在,这里的事情有点不清楚。 你为什么要使用Checkbox? 我想到了下一个可能的场景:你通过反序列化Json数据来获得一些你的爱好。 要将它们添加到ViewModel ,您只需要:

 App.Hobbies.HobbiesCollection.Add(new Hobby("firstHobbyFromJson", true)); App.Hobbies.HobbiesCollection.Add(new Hobby("secondHobbyFromJson", true)); 

这将使所有业余爱好都在View被选中。 我想,你会添加一些其他的爱好,用户没有选择哪些,现在可以添加它们:

 App.Hobbies.HobbiesCollection.Add(new Hobby("aNewHobby", false)); App.Hobbies.HobbiesCollection.Add(new Hobby("anotherNewHobby", false)); 

此时,用户已经在列表中拥有所有以前的爱好,以及您提供给他的一些新兴趣爱好。 选择完成后,如果你需要仅使用选定的爱好序列化Json,你可以这样:

 var userHobbies = App.Hobbies.HobbiesCollection.Where(h => h.IsSelected); 

或者使用foreach并仅获取具有IsSelected属性为true那些业余爱好对象。

祝好运!

我发现了一个更简单的解决方案

我的模特

你需要使用两个变量,否则你可能会得到’stackoverflowexception’

  public class ModelObj { public int position { set; get; } public bool isChecked { get { return IsChecked; } set { IsChecked = value; } } public bool IsChecked; } 

要在xaml中添加的代码:

  1. isChecked in xaml设置ListView复选框

  2. Mode = TwoWay更新模型类的isChecked布尔值

      

c#处理事件的代码

  private void checkBox_Checked(object sender, RoutedEventArgs e) { foreach (ModelObj obj in listItem) { if (obj.isChecked == true) { int selectedPosition = obj.position; } } }