Pergunta

atualmente quando tenho que fazer um OR de dois valores na propriedade IsEnabled de um controle acabo usando um controle container invisível (uso uma Border) e definindo o IsEnabled do controle e o do container.

Existe uma abordagem melhor?Caso contrário, qual é o controle mais leve para fazer isso?

Desde já, obrigado.

Foi útil?

Solução

Se a IsEnabled estiver definida via vinculação, você poderá usar Multibinando Em conjunto com um conversor multi-valor.

Outras dicas

Você pode usar um conversor como este:

public class BooleanOrConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        foreach (object value in values)
        {
            if ((value is bool) && (bool)value == true)
            {
                return true;
            }
        }
        return false;
    }
    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotSupportedException("BooleanOrConverter is a OneWay converter.");
    }
}

E é assim que você usaria:

<myConverters:BooleanOrConverter x:Key="BooleanOrConverter" />
...
<ComboBox Name="MyComboBox">
  <ComboBox.IsEnabled>
    <MultiBinding Converter="{StaticResource BooleanOrConverter}">
      <Binding ElementName="SomeCheckBox" Path="IsChecked" />
      <Binding ElementName="AnotherCheckbox" Path="IsChecked"  />
    </MultiBinding>
  </ComboBox.IsEnabled>
</ComboBox>

poderia usar um MultiBinding com umconversor que ou os valores passados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top