Option 1
Vous pouvez utiliser ValidationRules - il peut aussi se faire en XAML, et travaillerez pour une situation unique. Ce serait extrêmement localisé et pas quelque chose que je recommanderais puisque la règle ne serait pas réutilisable. Peut-être que quelqu'un d'autre peut proposer une règle générique pour englober différentes entrées. Essayez ceci.
<ComboBox>
<ComboBox.SelectedValue>
<Binding Path="Whatever" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<local:ComparisonValidationRule />
</Binding.ValidationRules>
</Binding>
</ComboBox.SelectedValue>
</ComboBox>
Et le ComparisonRule semble peut-être comme ça, et il devrait être dans le code-behind de cette règle pour voir les contrôles dans l'arborescence visuelle.
public class ComparisonValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
if (this.firstComboBox.SelectedIndex == this.secondComboBox.SelectedIndex)
return new ValidationResult(false, "These two comboboxes must supply different values.");
else return new ValidationResult(true, null);
}
}
OU vous pourriez certainement le faire avec un déclencheur si vous vouliez mettre des choses intéressantes en dehors d'un modèle d'erreur.
Option 2
utiliser un convertisseur de déclenchement &. Ce n'est vraiment pas trop difficile. Voici comment je le ferais.
<Style x:Key="{x:Type ComboBox}" TargetType="{x:Type ComboBox}">
<Style.Triggers>
<DataTrigger Value="True">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource EqualsConverter}">
<Binding ElementName="cbOne" Path="SelectedIndex"/>
<Binding ElementName="cbTwo" Path="SelectedIndex"/>
</MultiBinding>
</DataTrigger.Binding>
<Setter Property="Background" Value="Yellow"/>
</DataTrigger>
</Style.Triggers>
</Style>
et le convertisseur de code-behind
public class EqualsConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType,
object parameter, CultureInfo culture)
{
if (values[0] is int && values[1] is int && values[0] == values[1])
return true;
return false;
}
public object[] ConvertBack(object value, Type[] targetTypes,
object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}