【问题标题】:Loop Through TabItem CheckBoxes循环通过 TabItem 复选框
【发布时间】:2016-04-10 16:19:27
【问题描述】:

我有一组 50 个 CheckBoxes 放在 TabItem 中。单击按钮时,我需要遍历CheckBoxes,并根据CheckBox.Ischeckedtrue 还是false,将其相关变量设置为0 或1。

这是我开始尝试的一些代码;

private void ApplyPrivilegeUpdateClick(object sender, RoutedEventArgs e)
{
    var newPrivilegeModel = new EmployeePrivilegeModel();
    int i = 0;
    foreach (CheckBox c in companiesTabItem)
    {
        if (c.IsChecked == true)
        {
            newPrivilegeModel.Priv1 = 1;
        }
        i++;
    }
}

newPrivlegeModel.Priv1 - 这上升到Priv50,所以Priv1, Priv2, Priv3 等等。我真正不想做的是为所有50个CheckBoxes做一个If循环并设置它们的相关Priv

我有两个问题,如何循环遍历TabItem 中的所有50 个CheckBoxes?我怎样才能对newPrivlegeModel.Priv1 进行编码,以便它们都自动更新?例如,newPrivlegeModel.Priv + i 不起作用,我该如何解决这个问题?

【问题讨论】:

  • 您可以通过利用 WPF 强大的绑定系统来解决这个确切的问题:将每个复选框的 IsChecked 属性绑定到其相应的 EmployeePrivilegeModel 属性。转换器可用于在布尔值和整数之间进行转换。 MVVM 模式是在 WPF 中执行此操作的正统方法。
  • 你应该使用集合和绑定
  • 我已经开始在其他地方使用集合和绑定,唯一的问题是有 5 个TabItems,每个有 50 个CheckBoxes,所以我需要 250 个绑定元素而不是 50 个。跨度>

标签: c# wpf checkbox


【解决方案1】:

你为什么不使用Dictionary 而不是ofEmployeePrivilegeModel´?

我有一组 50 个 CheckBox,它们放置在 TabItem 内。单击按钮时,我需要遍历 CheckBox,并根据 CheckBox.Ischecked 是真还是假,将其相关变量设置为 0 或 1。

这是我开始尝试的一些代码;

private void ApplyPrivilegeUpdateClick(object sender, RoutedEventArgs e)
{
    var newPrivilegeModel = new Dictionary<string,int>();
    int i = 0;
    foreach (CheckBox c in companiesTabItem)
    {
        if (c.IsChecked == true)
        {
            if(newPrivilegeModel.ContainstKey("Priv"+(i + 1).ToString())){
              newPrivilegeModel["Priv"+(i + 1).ToString()]=1;
            }
            else
            {
              newPrivilegeModel.Add("Priv"+(i + 1).ToString(),1);
            }
        }
        i++;
    }
}

【讨论】:

  • 我尝试使用EmployeePrivilegeModel 的主要原因是因为我需要在我的MySQL Database 中更新它们。
  • 另外,这并不能解决我如何首先循环遍历TabItem 上的所有CheckBoxes
【解决方案2】:

将数组或列表添加到 EmployeePrivilegeModel 类以保存所有值。

var newPrivilegeModel = new EmployeePrivilegeModel();
newPrivilegeModel.PrivList = new List<bool>();
foreach (CheckBox c in companiesTabItem)
{
    if (c.IsChecked == true)
    {
        newPrivilegeModel.PrivList.Add(1);
    }
    else
    {
        newPrivilegeModel.PrivList.Add(0);
    }
}

【讨论】:

  • 我假设我会遍历PrivList 来决定需要添加到MySQL 的值?
  • 是的。 PrivList 将映射到数据库中的第一列,PrivList 映射到第二列,依此类推。
  • 好的,谢谢。您是否还知道如何在TabItem 上循环所有CheckBoxes?目前仅这样做不起作用:foreach (CheckBox c in companiesTabItem)
猜你喜欢
  • 1970-01-01
  • 2020-12-02
  • 2015-10-29
  • 2014-06-29
  • 2021-03-05
  • 2011-06-24
  • 1970-01-01
  • 2021-07-25
  • 1970-01-01
相关资源
最近更新 更多