Wpf Binding + DataTrigger
Здравствуйте, у меня есть проблема с Binding и DataTrigger. Итак, мой код:
<tog:HorizontalToggleSwitch Margin="0,10,15,0" HorizontalAlignment="Left" >
<tog:HorizontalToggleSwitch.Style>
<Style TargetType="{x:Type tog:HorizontalToggleSwitch}">
<Setter Property="IsChecked" Value="{Binding Staff.isSelfie, Mode=TwoWay}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=Admin,Path=IsChecked}" Value="True">
<Setter Property="IsChecked" Value="True" />
<Setter Property="IsEnabled" Value="False"/>
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=Admin,Path=IsChecked}" Value="False">
<Setter Property="IsChecked" Value="False" />
<Setter Property="IsEnabled" Value="True"/>
</DataTrigger>
</Style.Triggers>
</Style>
</tog:HorizontalToggleSwitch.Style>
</tog:HorizontalToggleSwitch>
Как видите, у меня есть обязательное значение Staff.isSelfie
в Собственности IsChecked, и я изменяю это в Datatrigger. Моя проблема в том, что я не получаю значение bool IsChecked в моей переменной Staff.isSelfie
, DataTrigger работает, потому что переключатель переключается с выключенного на включенный, пока я нажимаю на элемент администратора, который является радиокнопкой. Код из Staff.isSelfie
является:
bool _isSelfie;
[DataMember]
public bool isSelfie
{
get
{
return _isSelfie;
}
set
{
if (_isSelfie != value)
{
_isSelfie = value;
OnPropertyChanged(nameof(isSelfie));
}
}
}
которые реализуют INotifyPropertyChanged. Переменная Staff.isSelfie
взять его значение из bool в моей базе данных, поэтому я хочу установить его в начале. Как я могу получить значение true или false из DataTrigger в мою переменную Staff.isSelfie
? Что случилось? Большое спасибо.
1 ответ
<Setter Property="IsChecked" Value="False" />
удаляет существующую привязку Попробуйте прослушать события, когда Admin.IsChecked изменится, и соответственно обновите HorizontalToggleSwitch.IsChecked.
HorizontalToggleSwitch будет иметь только триггер для IsEnabled
<tog:HorizontalToggleSwitch IsChecked="{Binding Staff.isSelfie, Mode=TwoWay}"
Margin="0,10,15,0" HorizontalAlignment="Left">
<tog:HorizontalToggleSwitch.Style>
<Style TargetType="{x:Type tog:HorizontalToggleSwitch}">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=Admin,Path=IsChecked}" Value="True">
<Setter Property="IsEnabled" Value="False"/>
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=Admin,Path=IsChecked}" Value="False">
<Setter Property="IsEnabled" Value="True"/>
</DataTrigger>
</Style.Triggers>
</Style>
</tog:HorizontalToggleSwitch.Style>
</tog:HorizontalToggleSwitch>
и вот пример изменения IsChecked с 2 CheckBoxes:
<CheckBox Content="Admin" Name="Admin"
Checked="Admin_CheckedChanged" Unchecked="Admin_CheckedChanged"/>
<CheckBox Name="ToggleSwitch" IsChecked="{Binding Path=isSelfie}" Content="???"/>
private void Admin_CheckedChanged(object sender, RoutedEventArgs e)
{
ToggleSwitch.SetCurrentValue(CheckBox.IsCheckedProperty, Admin.IsChecked);
}