首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行时绑定更改+意外事件触发问题WPF

运行时绑定更改+意外事件触发问题WPF
EN

Stack Overflow用户
提问于 2014-04-12 07:59:21
回答 1查看 606关注 0票数 2

我在运行时使用XAML中的数据访问程序更改绑定,如下所示:

代码语言:javascript
复制
<ToggleButton Checked="MinSyncX_OnChecked" Unchecked="MinSyncX_OnUnchecked" TargetUpdated="FrameworkElement_OnTargetUpdated"
        Tag="{Binding Path=CameraViewDirection, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"
        ToolTip="{Binding Source={StaticResource CameraLocalization}, Path=ToolTips.SyncX, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}">
    <ToggleButton.Style>
        <Style TargetType="ToggleButton" BasedOn="{StaticResource CameraSyncCommonStyle}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=CameraViewDirection.Limitations.UI.SelectedLimitation.W, NotifyOnTargetUpdated=True, NotifyOnSourceUpdated=True, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" Value="0">
                    <Setter Property="IsEnabled" Value="{Binding Path=CameraViewDirection.Limitations.UI.IsMinTripleEnabled.X, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"></Setter>
                    <Setter Property="IsChecked" Value="{Binding Path=CameraViewDirection.Limitations.UI.IsMinTripleChecked.X, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"></Setter>
                </DataTrigger>
                <DataTrigger Binding="{Binding Path=CameraViewDirection.Limitations.UI.SelectedLimitation.W, NotifyOnTargetUpdated=True, NotifyOnSourceUpdated=True, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" Value="1">
                    <Setter Property="IsEnabled" Value="{Binding Path=CameraViewDirection.Limitations.UI.IsMaxTripleEnabled.X, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"></Setter>
                    <Setter Property="IsChecked" Value="{Binding Path=CameraViewDirection.Limitations.UI.IsMaxTripleChecked.X, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"></Setter>
                </DataTrigger>
                <DataTrigger Binding="{Binding Path=CameraViewDirection.Limitations.UI.SelectedLimitation.W, NotifyOnTargetUpdated=True, NotifyOnSourceUpdated=True, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" Value="2">
                    <Setter Property="IsEnabled" Value="{Binding Path=CameraViewDirection.Limitations.UI.IsBothTripleEnabled.X, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"></Setter>
                    <Setter Property="IsChecked" Value="{Binding Path=CameraViewDirection.Limitations.UI.IsBothTripleChecked.X, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"></Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ToggleButton.Style>
    <ToggleButton.Content>
        <Image Source="{Binding Source={StaticResource CameraIcons}, Path=XAxis, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"></Image>
    </ToggleButton.Content>
</ToggleButton>

所有的东西看起来都很好--绑定真的改变了,但是我有一个问题我不知道如何解决:

  • 当绑定更改时,即使绑定值为true,MinSyncX_OnUnchecked事件也会触发,这意味着必须选中Toggle按钮。
  • 在绑定切换期间触发此事件会阻止我的代码,因此,如果必须将IsChecked属性设置为true,那么现在如何在绑定更改期间抑制此事件。

有点棘手,但我希望你能理解我的问题。

编辑

有一件事我注意到,如果数据触发值切换到列表中的第一个值,就会触发未检查的事件。即使它有一个value=1或value=2。这是通过设计还是可以通过某种方式修复?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-12 14:55:50

我意识到我有两个绑定,所以,当绑定更改时,我的绑定属性首先从按钮接收值(这就是未检查事件触发的原因)。我找到的解决方案是:通过某个bool值锁定未检查事件的逻辑,并在绑定更改时切换回该值(在我的示例中,在combobx上选择更改事件)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23027839

复制
相关文章

相似问题

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