2016-08-30 2 views
0

Я требую некоторые значения в Combo Box предотвращено выбирается пользователем, когда конкретные значения выбраны в первом ComboBox, у меня есть две выпадающие списки, как это:XAML Предотвращение некоторых значений в Combo Box от выбран

<ComboBox x:Name="jobTypeComboBox"  SelectionChanged="ComboBox_SelectionChanged" Margin="10,66,209,461" IsSynchronizedWithCurrentItem="False" AllowDrop="True" PlaceholderText="job type" Background="Black" Foreground="#FFFDFDFD"> 
     <x:String>Repair</x:String> 
     <x:String>Replace</x:String> 
     <x:String>Special</x:String> 
     <x:String>Commercial</x:String> 
     <x:String>Plexi</x:String> 
     <x:String>Other</x:String> 
</ComboBox> 
<ComboBox x:Name="glassTypeComboBox" SelectionChanged="ComboBox_SelectionChanged" Margin="10,109,209,410" IsSynchronizedWithCurrentItem="False" AllowDrop="True" PlaceholderText="glass type" Background="Black"> 
     <x:String>Windscreen</x:String> 
     <x:String>Rearscreen</x:String> 
     <x:String>Side Glass</x:String> 
     <x:String>Mirror</x:String> 
     <x:String>Building Glass</x:String> 
     <x:String>Other</x:String> 
</ComboBox> 

Если я выбираю «Восстановить» в первом поле со списком, то второе поле со списком не содержит никаких значений, кроме «ветрового стекла» или «заднего экрана». Я новичок в XAML и не знаю, как бы я отказался от выбора определенные значения в этом комбинированном поле

EDIT:

private void jobTypeComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     foreach (var glassType in glassTypeComboBox.Items) 
     { 
      ComboBoxItem cbi = glassType as ComboBoxItem; 
      cbi.IsEnabled = true; // always default to enabled. 
      if (jobTypeComboBox.SelectedValue.ToString() == "Repair") 
      { 
       if ((cbi.Content.ToString() != "Windscreen") && (cbi.Content.ToString() != "Rearscreen")) 
       { 
        cbi.IsEnabled = false; 
       } 

      } 
      if (jobTypeComboBox.SelectedValue.ToString() == "Replace") 
      { 
       //More conditions here 
      } 
     } 
    } 

Это то, что я использую, чтобы попробовать удалить/отключить значения, которые я не хочу (благодаря Lynn Crumbling) за идею/помощь! Просто не могу получить его прочитать, если условие здесь:

if (jobTypeComboBox.SelectedValue.ToString() == "Repair") 

Я также попытался:

if (this.jobTypeComboBox.SelectedValue.ToString() == "Repair") 

и первоначальное предложение Линн с довольно много примеров этого.

Он просто пропускает его во время отладки, даже если он выбран. Любой дополнительный совет был бы потрясающим!

ответ

1

Если вы измените ваши записи в выпадающем списке фактического управления ComboBoxItem:

<ComboBox x:Name="jobTypeComboBox" 
     SelectionChanged="jobTypeComboBox_SelectionChanged" ...more stuff...> 
    <sys:String>Repair</sys:String> 
    <sys:String>Replace</sys:String> 
    <sys:String>Special</sys:String> 
    <sys:String>Commercial</sys:String> 
    <sys:String>Plexi</sys:String> 
    <sys:String>Other</sys:String> 
</ComboBox> 
<ComboBox x:Name="glassTypeComboBox" 
     SelectionChanged="glassTypeComboBox_SelectionChanged" ...more stuff...> 
    <ComboBoxItem>Windscreen</ComboBoxItem> 
    <ComboBoxItem>Rearscreen</ComboBoxItem> 
    <ComboBoxItem>Side Glass</ComboBoxItem> 
    <ComboBoxItem>Mirror</ComboBoxItem> 
    <ComboBoxItem>Building Glass</ComboBoxItem> 
    <ComboBoxItem>Other</ComboBoxItem> 
</ComboBox> 

Вы можете подключить свое jobTypeComboBox_SelectionChanged событие, чтобы изменить разрешенные ComboBoxItems по вашему выбору:

private void jobTypeComboBox_SelectionChanged(object sender, 
      System.Windows.Controls.SelectionChangedEventArgs e) 
{ 
    foreach (var glassType in this.glassTypeComboBox.Items) 
    { 
     ComboBoxItem cbi = glassType as ComboBoxItem; 
     cbi.IsEnabled = true; // always default to enabled. 
     if (this.jobTypeComboBox.SelectedValue.ToString() == "Repair") 
     { 
      if ((cbi.Content.ToString() != "Windscreen") && 
         (cbi.Content.ToString() != "Rearscreen")) 
      { 
       cbi.IsEnabled = false; 
      } 
     } 
     if (this.jobTypeComboBox.SelectedValue.ToString() == "Replace") 
     { 
      // Add more conditions... you get the idea... 
     } 
    } 
} 

Это всего лишь небольшой фрагмент, специально предназначенный для отключения этих элементов. Вероятно, вам понадобится гораздо больше условий.

Боковое примечание: когда-либо рассматривайте возможность использования подхода MVVM вместе с привязкой данных? Это настолько мощно.

+0

Эй, спасибо, кучи для этого! Это выглядит многообещающим ... и мне жаль, что я не знаком с MVVM – Khaoz

+0

Эй, там, после его реализации и тестирования, он не работает, когда я отлаживал его, он пропускал через if (this.jobTypeComboBox.SelectedValue.ToString() = = "Repair") { Несмотря на то, что у меня был выбран ремонт, я пробовал несколько вещей, но я не мог заставить его работать. Любая помощь очень ценится :) – Khaoz

+0

Не уверен - это отлично работает для меня. Я положил его под отладчиком, чтобы проверить. –

0

Попробуйте это для удаления элементов из ComboBox и не забудьте сохранить все элементы jobTypeComboBox, чтобы восстановить их, если тип задания изменился. Это всего лишь идея. Специализируйте его по своему усмотрению.

if (jobTypeComboBox.Text == "Repair") 
     for (int i = 2; i < jobTypeComboBox.Items.Count; i++) 
      glassTypeComboBox.RemoveAt(i); 
+0

Спасибо, я попробую! – Khaoz

+0

Хмм я мог видеть, где это будет работать хорошо, но в идеале я бы хотел, чтобы значения все еще были там, только не выбираемые пользователем – Khaoz