Wpf 绑定 + 数据触发器
Posted
技术标签:
【中文标题】Wpf 绑定 + 数据触发器【英文标题】:Wpf Binding + DataTrigger 【发布时间】:2018-02-02 01:40:33 【问题描述】:您好,我遇到了 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>
如您所见,我在 IsChecked 属性中有一个绑定值 Staff.isSelfie
,我在 Datatrigger 中更改了它。我的问题是我没有在变量Staff.isSelfie
中获得 IsChecked 的布尔值。 DataTrigger 有效,因为当我单击作为单选按钮的管理元素时,开关从关闭变为打开。 Staff.isSelfie
的代码是:
bool _isSelfie;
[DataMember]
public bool isSelfie
get
return _isSelfie;
set
if (_isSelfie != value)
_isSelfie = value;
OnPropertyChanged(nameof(isSelfie));
它实现了 INotifyPropertyChanged。变量Staff.isSelfie
从我的数据库中的布尔值中获取他的值,这就是我想在开始时设置它的原因。如何从 DataTrigger 获取值 true 或 false 到我的变量 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>
这是一个使用 2 个 CheckBox 更改 IsChecked 的示例:
<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);
【讨论】:
以上是关于Wpf 绑定 + 数据触发器的主要内容,如果未能解决你的问题,请参考以下文章