C# 从列表框中获取多个选中的复选框值

C# 从列表框中获取多个选中的复选框值,c#,windows-phone-8,listbox,C#,Windows Phone 8,Listbox,在我的windows phone应用程序中,我将获取所有联系人并附加复选框,如下所示: xaml page <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <StackPanel Height="Auto" Width="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="0

在我的windows phone应用程序中,我将获取所有联系人并附加复选框,如下所示:

xaml page
        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
            <StackPanel Height="Auto" Width="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="0,0,0,10">
                <TextBlock x:Name="ContactResultsLabel" Text="results are loading..." Style="{StaticResource PhoneTextLargeStyle}" TextWrapping="Wrap"></TextBlock>
                <ListBox x:Name="ContactResultsData" ItemsSource="{Binding listOfContacts}" Height="293" Margin="24,0,0,0">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal">
                            <CheckBox Name="contactChk" IsChecked="false" Foreground="Black" Background="Black" BorderBrush="White"></CheckBox>
                            <TextBlock x:Name="ContactResultsName" Text="{Binding Name}" FontSize="50"></TextBlock>
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
            </StackPanel>
            <Button x:Name="btn_addContacts"
                    Content="Add"
                    Width="200"
                    Height="70"
                    FontSize="25"
                    Foreground="Blue"
                    Background="AliceBlue"
                    Click="btn_addContacts_Click" Margin="130,496,126,-89"></Button>

        </Grid>
xaml页面
下面是xaml.cs页面:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Data;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using Microsoft.Phone.UserData;

namespace GetContacts
{
    public partial class SelectionOfContacts : PhoneApplicationPage
    {
        List<CustomContact> listOfContact = new List<CustomContact>();
        public SelectionOfContacts()
        {
            InitializeComponent();

            Contacts cons = new Contacts();
            cons.SearchCompleted += new EventHandler<ContactsSearchEventArgs>(Contacts_SearchCompleted);
            cons.SearchAsync(string.Empty, FilterKind.None, "Contacts Test #1");
        }
        private void Contacts_SearchCompleted(object sender, ContactsSearchEventArgs e)
        {
            try
            {
                //List<CustomContact> listOfContact = new List<CustomContact>();
                foreach (var c in e.Results)
                {
                    CustomContact contact = new CustomContact();
                    contact.Name = c.DisplayName;
                    int count = c.PhoneNumbers.Count();
                    for (int i = 0; i < count; i++)
                    {
                        if (count > 0 && c.PhoneNumbers.ElementAt(i).PhoneNumber != null && !string.IsNullOrEmpty(c.PhoneNumbers.ElementAt(i).PhoneNumber))
                        {
                            contact.Number[i] = c.PhoneNumbers.ElementAt(i).PhoneNumber.ToString();
                        }
                        else
                        {
                            contact.Number[i] = "";
                        }
                    }
                    listOfContact.Add(contact);

                }

                ContactResultsData.ItemsSource = listOfContact;

            }
            catch (System.Exception)
            {
                //No results
            }
            if (ContactResultsData.Items.Any())
            {
                ContactResultsLabel.Text = "results";
            }
            else
            {
                ContactResultsLabel.Text = "no results";
            }
        }

        private void btn_addContacts_Click(object sender, RoutedEventArgs e)
        {
            var selectvalue = ContactResultsData.SelectedItem;
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
Net系统;
使用System.Windows;
使用System.Windows.Controls;
使用System.Windows.Data;
使用System.Windows.Documents;
使用System.Windows.Input;
使用System.Windows.Media;
使用System.Windows.Media.Imaging;
使用系统数据;
使用System.Windows.Navigation;
使用Microsoft.Phone.Controls;
使用Microsoft.Phone.Shell;
使用Microsoft.Phone.UserData;
命名空间GetContacts
{
公共部分类SelectionOfContacts:PhoneApplicationPage
{
List-listOfContact=新列表();
public SelectionOfContacts()
{
初始化组件();
Contacts cons=新联系人();
cons.SearchCompleted+=新事件处理程序(联系人\u SearchCompleted);
cons.SearchAsync(string.Empty,FilterKind.None,“Contacts Test#1”);
}
私人无效联系人搜索已完成(对象发件人、联系人搜索目标e)
{
尝试
{
//List-listOfContact=新列表();
foreach(e.Results中的var c)
{
CustomContact=新的CustomContact();
contact.Name=c.DisplayName;
int count=c.PhoneNumbers.count();
for(int i=0;i0&&c.PhoneNumbers.ElementAt(i).PhoneNumber!=null&&string.IsNullOrEmpty(c.PhoneNumbers.ElementAt(i).PhoneNumber))
{
contact.Number[i]=c.PhoneNumbers.ElementAt(i.PhoneNumber.ToString();
}
其他的
{
联系人号码[i]=“”;
}
}
联系人列表。添加(联系人);
}
ContactResultsData.ItemsSource=联系人列表;
}
捕获(系统异常)
{
//没有结果
}
if(ContactResultsData.Items.Any())
{
ContactResultsLabel.Text=“结果”;
}
其他的
{
ContactResultsLabel.Text=“无结果”;
}
}
私有无效btn\u添加联系人\u单击(对象发送者,路由目标e)
{
var selectvalue=ContactResultsData.SelectedItem;
}
}
}
它工作正常,在这一行
var selectvalue=ContactResultsData.SelectedItem
仅获取复选框的选中值,但我想从列表框中获取多个选中的复选框值,请建议我所做的,等待您的答复。 谢谢。

您是否尝试使用(结尾带有“s”的)属性?根据文档列表框中的内容,它似乎正是您要查找的内容

您可能需要修改ListBox的SelectionMode属性

当SelectionMode为Multiple或Extended时,请使用SelectedItems 属性以获取选定的项目。选择模式时 单选,使用Selector.SelectedItem属性获取 选中

此外,还应为ItemTemplate中的复选框设置绑定,以使其正常工作:

<ListBox x:Name="ContactResultsData" SelectionMode="Multiple" ItemsSource="{Binding listOfContacts}" Height="293" Margin="24,0,0,0">
     <ListBox.ItemTemplate>
         <DataTemplate>
             <StackPanel Orientation="Horizontal">
                 <CheckBox Name="contactChk" 
                           IsChecked={Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}},
                                         Path=IsSelected}"
                           Foreground="Black" Background="Black" BorderBrush="White">  
                 </CheckBox>
                    <TextBlock x:Name="ContactResultsName" Text="{Binding Name}" FontSize="50"></TextBlock>
               </StackPanel>
          </DataTemplate>
     </ListBox.ItemTemplate>
</ListBox>


我想更改复选框的selectionMode属性,但它不显示任何类似的属性?为什么?还有我所做的。不是复选框,而是ListBox具有该属性,您应该在XAML文件中设置它,如下所示:并且您可能必须将ItemTemplate中复选框的IsChecked属性绑定到包含ListBoxItem的IsSelected属性。但是更改SelectionMode=“Multiple”后当前上下文中不存在名称“ContactResultsData”下的错误。我使用列表框名称的地方,即
ContactResultsData
。为什么?您保留了x:name=“ContactResultsData”部分吗?可能是输入错误,控件名称拼写错误。。。