Скрыть ComboboxItem, если содержит некоторую строку - PullRequest
0 голосов
/ 27 сентября 2018

Есть ли способ свернуть или скрыть некоторые ComboBoxItems, если они содержат определенную строку?

Я пытался

foreach (ComboBoxItem b in cboServers.Items)
{
      if (b.Content.ToString().Contains("prod")) 
      { b.Visibility = Visibility.Visible; } 
      else 
      { b.Visibility = Visibility.Collapsed; }
}

, но не работает, потому что ComboBoxItem не может быть преобразован в строку

//Read file's content. 
foreach (IniSection ContainerForThisServer in iniFile.Sections) 
{ 
    cboServidores.Items.Add(ContainerForThisServer.Name.ToUpper()); 
    FillTab(ContainerForThisServer.Name.ToUpper(), ContainerForThisServer); 
}

Ответы [ 3 ]

0 голосов
/ 27 сентября 2018
List<ComboBoxItem> hiddenItems = new List<ComboBoxItem>();
foreach (ComboBoxItem b in cboServers.Items)
{
    if (b.Text.Contains("PROD")) 
    { 
        hiddenItems.Add(b);
    }
}

foreach (ComboBoxItem hiddenItem in hiddenItems) 
{
    cboServers.Items.Remove(hiddenItem);
}
//hiddenItems now contains everything that was hidden if you want to use it at a later date

надеюсь, это поможет?

0 голосов
/ 27 сентября 2018

Я нашел решение.

Я должен использовать:

foreach (IniSection ContainerForThisServer in iniFile.Sections) { 
ComboBoxItem i = new ComboBoxItem();
                i.Content = ContainerForThisServer.Name.ToUpper();
                cboServers.Items.Add(i);
 }

вместо:

foreach (IniSection ContainerForThisServer in iniFile.Sections) { cboServers.Items.Add(ContainerForThisServer.Name.ToUpper()); 
 }

и теперь Visibility и Collapsed отлично работают без использования .Remove()

foreach (ComboBoxItem b in cboServers.Items)
{
      if (b.Content.ToString().ToLower().Contains("prod")) 
      { b.Visibility = Visibility.Visible; } 
      else 
      { b.Visibility = Visibility.Collapsed; }
}
0 голосов
/ 27 сентября 2018

Ваш код не работает, потому что вы добавляете элементы в верхнем регистре, а оператор if проверяет "prod" в нижнем регистре, но почему бы не остановить элементы в поле со списком?

foreach (IniSection ContainerForThisServer in iniFile.Sections) 
{ 
    if (b.Content.ToString().Contains("prod"))
    {
        cboServidores.Items.Add(ContainerForThisServer.Name.ToUpper()); 
        FillTab(ContainerForThisServer.Name.ToUpper(), ContainerForThisServer); 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...