【问题标题】:Use Listbox and checkbox like CheckBoxList from .NET in Windows Phone在 Windows Phone 中使用来自 .NET 的 Listbox 和 CheckBoxList 等复选框
【发布时间】:2021-03-05 19:52:01
【问题描述】:

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

我想在数据模板中使用一个带有一个复选框的列表框,就像 .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;
        }

这是上面使用的类。

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 中第一个选中复选框的文本。所以我可以将它发送到网络服务并保存到数据库中。

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

任何帮助将不胜感激

【问题讨论】:

    标签: c# windows-phone-7 checkbox listbox


    【解决方案1】:

    我建议将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
        }
    }
    

    【讨论】:

    • 好的,我想我明白了,我在 Equipas 类中添加了 bool isChecked(还没有),但它不适用于您的代码,数组返回空
    • var checkedItems = Equipas.Where(o => o.IsSelected);所有项目都使用 isSelected = false,如果单击时我们检查原始数组而不是列表框数组,isSelected 始终为 false。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多