Как привязать два разных свойства к CheckBox.IsChecked?
Не могу сообразить, как привязать два разных свойства к CheckBox на форме WPF Есть свойство IsCheckedManualQ, и есть свойство VNATrigger
<CheckBox x:Name="CheckManualQ" Content="Ввести вручную Q₀n / Q₁n"
FontWeight="Medium"
FontSize="12"
VerticalAlignment="Center"
DockPanel.Dock="Right" Margin="0,0,10,0"
IsChecked="{Binding IsCheckedManualQ}">
<CheckBox.Style>
<Style TargetType="{x:Type CheckBox}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=VNATrigger}" Value="False">
<Setter Property="CheckBox.IsChecked" Value="False"/>
<Setter Property="CheckBox.IsEnabled" Value="True"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=VNATrigger}" Value="True">
<Setter Property="CheckBox.IsChecked" Value="True"/>
<Setter Property="CheckBox.IsEnabled" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
</CheckBox.Style>
</CheckBox>
Мне нужно сделать, чтобы когда пользователь нажимал на CheckBox - свойство bool IsCheckedManualQ изменялось. А когда нажимает другую кнопку, которая задает значение bool VNATrigger - то это воздействовало на CheckBox (переводило в IsChecked в True)и блокировало его если VNATrigger True и разблокировала если False (и у CheckBox.IsChecked становилось = True).
Если убрать в CheckBox'e вверху
..............
DockPanel.Dock="Right" Margin="0,0,10,0"
IsChecked="{Binding IsCheckedManualQ}"> - -- вот это
Тогда все работает как надо, но соответственно пропадает привязка к свойству IsCheckedManualQ - а мне нужно и то и другое Есть какие нибудь простые методы этого достигнуть?
Свойство VNATrigger
#region VNATirgger
private bool _VNATrigger = false;
public bool VNATrigger
{
get => _VNATrigger;
set => Set(ref _VNATrigger, value);
}
#endregion
Ответы (1 шт):
Разделите задачу на 2 части: управление доступностью и управление состоянием чекбокса
Управление доступностью сделать просто, просто убрать лишнее:
<CheckBox x:Name="CheckManualQ" Content="Ввести вручную Q₀n / Q₁n"
FontWeight="Medium"
FontSize="12"
VerticalAlignment="Center"
DockPanel.Dock="Right" Margin="0,0,10,0"
IsChecked="{Binding IsCheckedManualQ}">
<CheckBox.Style>
<Style TargetType="{x:Type CheckBox}">
<Style.Triggers>
<DataTrigger Binding="{Binding VNATrigger}" Value="True">
<Setter Property="IsEnabled" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
</CheckBox.Style>
</CheckBox>
Управление состоянием, это переключить в true свойство IsCheckedManualQ если VNATrigger получил состояние true. Это уже можно сделать в коде вьюмодели.
private bool _VNATrigger;
public bool VNATrigger
{
get => _VNATrigger;
set
{
if (value)
IsCheckedManualQ = value;
Set(ref _VNATrigger, value);
}
}
Вот и всего делов. Главное - не перемешивать задачи, и всё встанет на свои места.