Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在windows phone应用程序中获取复选框内容?_C#_Checkbox_Windows Phone - Fatal编程技术网

C# 如何在windows phone应用程序中获取复选框内容?

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>

我正在开发windows phone应用程序。在应用程序中,我希望设置多个复选框。我可以设置多个复选框。但是,当我选中复选框时,我希望获取其内容(复选框内容)。为此,我使用了选中事件,也单击了事件,但我无法获得所需的结果。我的xaml代码如下:

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