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】:

&lt;Setter Property="IsChecked" Value="False" /&gt; 删除现有绑定。尝试在 Admin.IsChecked 更改时监听事件并相应地更新 Horizo​​ntalToggleSwitch.IsChecked。

Horizo​​ntalToggleSwitch 将只有 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 绑定 + 数据触发器的主要内容,如果未能解决你的问题,请参考以下文章

2021-09-14 WPF上位机 13-属性绑定(源更新触发器)

WPF 触发器绑定:将枚举值绑定到可见性的最佳方法是啥?

WPF数据模板中绑定事件不触发问题

WPF 精修篇 数据触发器

在每个新字符上触发 WPF TextBox 绑定?

WPF – 使用触发器