Como vincular a propriedade IsEnabled a um OR de dois valores?
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.
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