Вы можете использовать преобразователь значения, который возвращает логическое значение:
С этим преобразователем свяжите одно свойство Checkbox.IsChecked с логическим значением без преобразователя и одно свойство CheckBox.IsChecked с преобразователем.,Это должно сработать.
Вот код для такого конвертера.Я скопировал его из здесь и добавил несколько строк кода.Там вы найдете больше информации о.
public class BoolToOppositeBoolConverter : IValueConverter {
public object Convert(object value, Type targetType, object parameter,System.Globalization.CultureInfo culture) {
if (targetType != typeof(bool)) {
throw new InvalidOperationException("The target must be a boolean");
}
if (null == value) {
return null;
}
return !(bool)value;
}
public object ConvertBack(object value, Type targetType, object parameter,System.Globalization.CultureInfo culture) {
if (targetType != typeof(bool)) {
throw new InvalidOperationException("The target must be a boolean");
}
if (null == value) {
return null;
}
return !(bool)value;
}
}
Чтобы использовать его, объявите его в разделе ресурсов.
<local:BoolToOppositeBoolConverter x:Key="BoolToOppositeBoolConverter_ValueConverter"/>
И используйте его в привязке как статический ресурс:
<CheckBox IsChecked="{Binding YourProperty}" />
<CheckBox IsChecked="{Binding YourProperty,Converter={StaticResource BoolToOppositeBoolConverter_ValueConverter}}" />
Обратите внимание, что конвертер является лишь простым примером.Реализуйте это аккуратно, если вы хотите использовать его в производительном коде.Я не проверял это.Оставьте комментарий, если он не работает.