在Windows Phone中使用.NET中的Listbox和类似CheckBoxList的复选框

本文关键字:CheckBoxList 复选框 Listbox 中的 Phone Windows NET | 更新日期: 2023-09-27 17:59:05

很抱歉问这个基本问题,但我厌倦了搜索所有内容,找不到任何有用的内容。

我想在数据模板中使用一个列表框和一个复选框,就像.Net中的CheckBoxList一样,我唯一想做的就是:让前面有名称的复选框列表,选择一个,然后单击一个按钮,选中列表框中的项目,并检索所选复选框的文本。

我是一名.NET程序员,但这开始让我感到不安

这是ListBox XAML代码。

<ListBox Height="299" Name="lstbEquipas" Width="432">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <CheckBox Name="ckbEquipa" Content="{Binding Designacao}"/>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>

这就是我用来填充列表框的方法,它的工作原理与aspnet中的CheckListBox完全一样,一个前面有文本的复选框列表。

GameManager.GameManagerSoapClient GM;
        public Page1()
        {
            InitializeComponent();
            GM = new GameManager.GameManagerSoapClient();
            GM.LerEquipasAsync();
            GM.LerEquipasCompleted += new EventHandler<GameManager.LerEquipasCompletedEventArgs>(GM_LerEquipasCompleted);
        }
        void GM_LerEquipasCompleted(object sender, GameManager.LerEquipasCompletedEventArgs e)
        {
            XDocument data = XDocument.Load(new StringReader(e.Result));
            var equipas = from query in data.Descendants("Equipas")
                          select new Equipa
                          {
                              ID = (int)query.Element("ID"),
                              Designacao = (string)query.Element("Designacao"),
                          };
            lstbEquipas.ItemsSource = equipas;
        }

这就是上面使用的classe。

public class Equipa
{
int iD;
string designacao;
public int ID
{
    get { return iD; }
    set { iD = value; }
}
public string Designacao
{
    get { return designacao; }
    set { designacao = value; }
}
}

我只想在按钮点击事件中,获取ListBox中第一个选中复选框的文本。所以我可以将它发送到Web服务并保存到数据库中。

private void btnRegistar_Click(object sender, RoutedEventArgs e)
{
    int i = 0;
    foreach (ListBoxItem Item in this.lstbEquipas.Items)
    {
        //i want to check the checkbox were
    }
    //GM.InserirNovoUtilizadorAsync(this.txtLoginUtilizador.Text, this.txtLoginPassword.Password, 1);
    //GM.InserirNovoUtilizadorCompleted += new EventHandler<GameManager.InserirNovoUtilizadorCompletedEventArgs>(GM_InserirNovoUtilizadorCompleted);
}

如有任何帮助,将不胜感激

在Windows Phone中使用.NET中的Listbox和类似CheckBoxList的复选框

我建议将ItemsSource的数据存储在一个属性中:

public ObservableCollection<Equipa> Equipas { get; set; }
void GM_LerEquipasCompleted(object sender, GameManager.LerEquipasCompletedEventArgs e)
{
    XDocument data = XDocument.Load(new StringReader(e.Result));
    var equipas = from query in data.Descendants("Equipas")
                  select new Equipa
                  {
                      ID = (int)query.Element("ID"),
                      Designacao = (string)query.Element("Designacao"),
                  };
    Equipas = new ObservableCollection<Equipa>(equipas);
    lstbEquipas.ItemsSource = Equipas;
}

然后,您可以使用LINQ:从上面的属性中获得所有检查项目的列表

private void btnRegistar_Click(object sender, RoutedEventArgs e)
{
    //get only checked items, and store it in variable
    var checkedItems = Equipas.Where(o => o.IsSelected);
    foreach (Equipa Item in checkedItems)
    {
        //here you can save current item to database
    }
}