2016-01-06 34 views
2

我有一组50 CheckBoxes放置在TabItem内。点击一个按钮,我需要通过CheckBoxes环和基于CheckBox.Ischeckedtruefalse,它的相关变量将被设置为0或1。Loop Through TabItem CheckBoxes

下面是一些代码我一起开始尝试开始;

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等等等等,我真的不希望有做的是做一个If循环对所有50 CheckBoxes并设置其相关Priv

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

+0

您可以通过利用WPF的强大约束力的系统解决这一确切的问题:每个复选框的财产器isChecked绑定到其相应的财产EmployeePrivilegeModel。转换器可用于在布尔值和整数之间进行转换。 MVVM模式是在WPF中执行此操作的正统方法。 –

+0

你应该使用收集和绑定 – Paparazzi

+0

我已经开始使用集合并绑定到其他地方,唯一的问题是有5个'TabItems'每个都有50个'CheckBoxes',所以我需要250个绑定元素而不是50个。 – CBreeze

回答

0

为什么不使用Dictionary而不是ofEmployeePrivilegeModel'?

我有一组50个CheckBoxes放在TabItem中。在点击一个按钮时,我需要循环检查框,并根据CheckBox.Ischecked是true还是false,将相关变量设置为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++; 
    } 
} 
+0

我试图使用EmployeePrivilegeModel的主要原因是因为我需要在我的MySQL数据库中更新它们。 – CBreeze

+0

此外,这并不能解决我如何循环浏览“TabItem”上的所有“CheckBoxes”。 – CBreeze

0

向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); 
    } 
} 
+0

我假设我会循环'PrivList'来决定添加到'MySQL'所需的值? – CBreeze

+0

是的。 PrivList <0>将映射到您的数据库中的第一列,PrivList <1>到第二列等 –

+0

好的谢谢。你是否也知道如何遍历'TabItem'上的所有'CheckBoxes'?只做这件事现在不起作用:'foreach(在companyTabItem中的CheckBox c)'' – CBreeze