C# 如何在windows phone应用程序中获取复选框内容?
我正在开发windows phone应用程序。在应用程序中,我希望设置多个复选框。我可以设置多个复选框。但是,当我选中复选框时,我希望获取其内容(复选框内容)。为此,我使用了选中事件,也单击了事件,但我无法获得所需的结果。我的xaml代码如下:C# 如何在windows phone应用程序中获取复选框内容?,c#,checkbox,windows-phone,C#,Checkbox,Windows Phone,我正在开发windows phone应用程序。在应用程序中,我希望设置多个复选框。我可以设置多个复选框。但是,当我选中复选框时,我希望获取其内容(复选框内容)。为此,我使用了选中事件,也单击了事件,但我无法获得所需的结果。我的xaml代码如下: <ListBox Name="hobbylist" ItemsSource="{Binding}" Margin="0,0,10,10" > <ListBox.ItemTemplate>
<ListBox Name="hobbylist" ItemsSource="{Binding}" Margin="0,0,10,10" >
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox Name="hobbycheck" Content="{Binding Path=Title}"
IsChecked="{Binding IsSelected}" ClickMode="Release"
Click="CheckBox_Click" ></CheckBox>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
请帮帮我…我认为您使用的
复选框不符合其用途
复选框
应表示有关主题的状态(例如是/否)。尽管如此,当复选框被选中时,您只需使用Checked
事件,否则将使用Unchecked
事件
因此,在Checked
事件中,获取您想要的内容
编辑
您必须以某种方式使用MVVM模式来维护这一点。对于这一点,互联网上有很多例子,我相信你能处理好
使用Check
事件代替Click=“CheckBox\u Click”
:
private void CheckBox_Checked (Object sender, EventArgs e)
{
var currentCheckBoxItem = sender as CheckBox;
if (currentCheckBoxItem.IsChecked == true)
{
//you manipulation here...
}
}
还是。这可能行不通,因为你没有提供足够的细节
编辑2一点MVVM
首先,用一个字符串属性创建一个Hobby
model类(以后您可能会改变主意添加更多属性,Idk):
(*)例如,一个简短的描述,然后将其绑定到视图上。这种MVVM模式的主要优点是逻辑分离,因此,如果必须更改某些内容,则每个组件的分离将使其变得更容易
其次,创建ViewModel类(应实现INotifyPropertyChanged接口):
现在,你几乎把一切都准备好了;有了模型,就有了视图模型,剩下的就是创建与视图的连接。这可以通过绑定轻松完成。ViewModel表示控件的DataContext
(在您的示例中是LongListSelector
),因此在该视图(页面)的构造函数中,编写以下语句:
yourListControlName.DataContext = App.Hobbies;
现在只剩下绑定了。这是在XAML代码中完成的。我不会在这里放一整段XAML代码,因为您最清楚控件的外观。不过,从您提供的简短示例来看,只有一些调整:
list XAML控件的items源将绑定到表示控件的DataContext
的ViewModel
对象名称的ObservableCollection
。有点模糊,是吧?为了更清楚,在这种情况下,您需要编写ItemsSource=“{Binding HobbiesCollection}”
,ObservableCollection
。此外,在模板中,您应该有绑定在模型的属性上的复选框
:
<DataTemplate>
<StackPanel Orientation="Horizontal"> //StackPanel is kinda useless if you have
//only one child control in it. But I wrote
//according to your code.
<Checkbox Content="{Binding Name}" IsChecked="{Binding IsSelected, Mode=TwoWay}"/>
</StackPanel>
</DataTemplate>
这将使所有爱好都已在视图中选中。我想,您应该添加一些其他爱好,用户没有未选中的爱好,现在可以添加它们:
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中添加的代码:
isChecked in xaml设置ListView复选框
Mode=TwoWay更新模型类的isChecked布尔值
<CheckBox IsChecked="{Binding isChecked , Mode=TwoWay}" Checked="checkBox_Checked" >
首先,谢谢你重播。你能告诉我你的代码吗?我想要那个校验值,因为我想用json序列化它,然后将它发送到数据库。你能给我一些例子吗?我很容易理解我忘记了什么或者我犯了什么错。你必须提供你的问题的更多细节。本质上,我想要概述的是t您正在使用错误的事件。如果您只想在选中复选框时发生某些事情(不在取消选中时发生),使用Checked
事件。我有一个页面,其中显示了hobby。这是我通过反序列化Web客户端响应获得的。现在,当用户选中check on hobby复选框时,所有的hobby都是我想要在一个特定的列表或数组中。然后将其序列化为json以在用户配置文件中发送更新hobby。当您在反序列化,您应该构建一些视图模型(MVVM)以显示在视图(页面)上,用户进行更改(选择/取消选择等),然后分析LongListSelecter的ItemSource,以获得更改后的嗜好,并重建格式以使用Json发送,以更新配置文件。是的,先生,我希望与您理解的完全相同,但我不熟悉这项技术,因此我不了解mvvm,因此您能帮我解决此问题吗。
App.Hobbies.HobbiesCollection.Add(new Hobby("aNewHobby", false));
App.Hobbies.HobbiesCollection.Add(new Hobby("anotherNewHobby", false));
var userHobbies = App.Hobbies.HobbiesCollection.Where(h => h.IsSelected);
public class ModelObj
{
public int position { set; get; }
public bool isChecked
{
get { return IsChecked; }
set { IsChecked = value; }
}
public bool IsChecked;
}
<CheckBox IsChecked="{Binding isChecked , Mode=TwoWay}" Checked="checkBox_Checked" >
private void checkBox_Checked(object sender, RoutedEventArgs e)
{
foreach (ModelObj obj in listItem)
{
if (obj.isChecked == true)
{
int selectedPosition = obj.position;
}
}
}