2016-01-06 2 views
2

У меня есть группа из 50 CheckBoxes, которые размещены внутри TabItem. На нажатие кнопки, мне нужно петлю через CheckBoxes и на основе ли CheckBox.Ischecked является true или false, это соответствующая переменная будет установлен в 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.

У меня есть две проблемы, как мне пройти через все 50 CheckBoxes в TabItem? И как я могу закодировать 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. Нажав на кнопку, мне нужно пройти через CheckBoxes и на основании того, является ли 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++; 
    } 
} 
+0

Основная причина, по которой я пытаюсь использовать 'EmployeePrivilegeModel', - это то, что мне нужно обновить их в моей базе данных MySQL. – CBreeze

+0

Кроме того, это не решает, как я буду прокручивать все «CheckBoxes» на «TabItem» в первую очередь. – 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

Хорошо спасибо. Вы также знаете, как перебирать все «CheckBoxes» на «TabItem»? Выполнение только этого не работает в настоящий момент: 'foreach (CheckBox c в компанияхTabItem)' – CBreeze