2015-03-31 9 views
0

Я знаю, что уже есть много примеров для подобных действий, и я прочитал их, но не могу понять, почему моя реализация не работает.WPF включить combobox на основе другого combobox

Я пытаюсь отключить ComboBoxB, когда ComboBoxA установлен в значение X. С помощью этой реализации ComboBoxB всегда включен независимо от значения, выбранного в ComboBoxA.

ComboBoxA:

<ComboBox Name="ComboBoxA"> 
    <ComboBoxItem Name="X">X</ComboBoxItem> 
    <ComboBoxItem Name="Y">Y</ComboBoxItem> 
</ComboBox> 

ComboBoxB:

<ComboBox Name="ComboBoxB"> 
    <ComboBoxItem Name="Something">Something</ComboBoxItem> 
    <ComboBox.Style> 
     <Style TargetType="{x:Type ComboBox}"> 
      <Setter Property="IsEnabled" Value="True" /> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Path=SelectedItem,ElementName=ComboBoxA}" Value="X"> 
        <Setter Property="IsEnabled" Value="False" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </ComboBox.Style> 
</ComboBox> 

ответ

0

Вы не выполнили привязку данных к ComboboxA.

Ваш реферирование ElementName "ComboboxA" и НЕ "ComboboxB"

У вас есть:

<DataTrigger Binding="{Binding Path=SelectedItem,ElementName=ComboBoxB}" Value="X"> 

Это должно быть:

<DataTrigger Binding="{Binding Path=SelectedItem,ElementName=ComboBoxA}" Value="X"> 

.

<ComboBox Name="ComboBoxB"> 
    <ComboBoxItem Name="Something">Something</ComboBoxItem> 
    <ComboBox.Style> 
     <Style TargetType="{x:Type ComboBox}"> 
      <Setter Property="IsEnabled" Value="True" /> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Path=SelectedItem,ElementName=ComboBoxA}" Value="X"> 
        <Setter Property="IsEnabled" Value="False" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </ComboBox.Style> 
</ComboBox> 
+0

Извините, это была опечатка, когда я упростил имена, используемые в вопросе. Мой настоящий ComboBoxB правильно связан с ComboBoxA. (Я обновил пример), но это не работает для меня. Есть идеи? – Scotty

+0

В окне вывода вы наблюдаете какие-либо ошибки привязки? –

+0

Ошибок в выводе или ошибках. Я могу обновить вопрос с помощью моего фактического кода, если на простом примере, который я опубликовал, нет ошибок. – Scotty

0

Для этого вы можете использовать преобразователи.

public class SelectedItemToDisable : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 

     if (value != null) 
     { 
      var val = (value as ComboBoxItem).Content; 
      if (val.ToString() == "X") //may be its not string, some object type 
       return false; 
     } 
     return true; 
    } 

определить преобразователь в части ресурсов в Xaml.

<local:SelectedItemToDisable x:Key="DisableConverter"/> 

<ComboBox Name="ComboBoxA"> 
<ComboBoxItem Name="X">X</ComboBoxItem> 
<ComboBoxItem Name="Y">Y</ComboBoxItem> 
</ComboBox> 
<ComboBox Name="ComboBoxB" IsEnabled="{Binding Path=SelectedItem, ElementName=ComboBoxA, Converter={StaticResource DisableConverter}}"> 
<ComboBoxItem Name="Something">Something</ComboBoxItem> 
</ComboBox> 

Надеюсь, это поможет.

Смежные вопросы