首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Wpf绑定+ DataTrigger

Wpf绑定+ DataTrigger
EN

Stack Overflow用户
提问于 2017-08-24 16:51:53
回答 1查看 2K关注 0票数 0

你好,我有一个绑定和DataTrigger的问题。所以我的代码是:

代码语言:javascript
复制
<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的代码是:

代码语言:javascript
复制
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?怎么啦?非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-24 17:20:04

<Setter Property="IsChecked" Value="False" />删除现有绑定。尝试在Admin.IsChecked更改时侦听事件并相应地更新HorizontalToggleSwitch.IsChecked。

HorizontalToggleSwitch将只有IsEnabled的触发器

代码语言:javascript
复制
<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个CheckBoxes更改IsChecked的示例:

代码语言:javascript
复制
<CheckBox Content="Admin" Name="Admin" 
          Checked="Admin_CheckedChanged" Unchecked="Admin_CheckedChanged"/>
<CheckBox Name="ToggleSwitch" IsChecked="{Binding Path=isSelfie}" Content="???"/>
代码语言:javascript
复制
private void Admin_CheckedChanged(object sender, RoutedEventArgs e)
{
    ToggleSwitch.SetCurrentValue(CheckBox.IsCheckedProperty, Admin.IsChecked);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45857103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档