Question

actuellement, lorsque je dois faire un OU de deux valeurs sur la propriété IsEnabled d'un contrôle, je termine en utilisant un contrôle conteneur invisible (j'utilise un Border) et en définissant le IsEnabled du contrôle et celui du conteneur.

Est-ce qu'il y a une meilleure approche?Si non, quel est le contrôle le plus léger pour ce faire ?

Merci d'avance.

Était-ce utile?

La solution

Si IsEnabled est défini via la liaison, vous pouvez utiliser Liaison multiple en collaboration avec un convertisseur multi-valeurs.

Autres conseils

Vous pouvez utiliser un convertisseur comme celui-ci:

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.");
    }
}

Et c'est comme ça que vous l'utiliseriez:

<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>

Pourrait utiliser un MultiBinding avec un convertisseur qui correspond aux valeurs transmises.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top