C# 从列表框中获取多个选中的复选框值
在我的windows phone应用程序中,我将获取所有联系人并附加复选框,如下所示: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
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”部分吗?可能是输入错误,控件名称拼写错误。。。