加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

使用WPF显式绑定时检查挂起的更改

发布时间:2020-12-15 02:30:00 所属栏目:Java 来源:网络整理
导读:我有一个模式弹出窗口,其中包含一个CheckBox,当用户单击窗体上的保存按钮时,它使用显式绑定来更新绑定源. CheckBox Content="Default" IsChecked="{Binding Path=Unit.IsDefault,Mode=TwoWay,UpdateSourceTrigger=Explicit"/ 现在我想在表单中添加一个取消按
我有一个模式弹出窗口,其中包含一个CheckBox,当用户单击窗体上的保存按钮时,它使用显式绑定来更新绑定源.

<CheckBox Content="Default" IsChecked="{Binding Path=Unit.IsDefault,Mode=TwoWay,UpdateSourceTrigger=Explicit"/>

现在我想在表单中添加一个取消按钮,如果用户点击它我想检查是否有任何挂起的绑定更新,如果是,则向用户显示一条消息.

这可能与绑定有关吗?我希望有类似的东西:

BindingExpression binding = cb.GetBindingExpression(CheckBox.IsCheckedProperty);
binding.HasPendingUpdates(); // Anything similar to this?

如果没有,那么有没有人对如何跟踪尚未明确更新的绑定的更改有任何其他建议?

解决方法

正如Kurian指出的那样,如果您使用的是.NET 4.5,则可以使用BindingExpressionBase上的属性IsDirty.

与此同时,解决方法可能是使用反射检查内部属性NeedsUpdate:

public static bool IsDirty(this BindingExpression binding)
{
    if (binding == null)
        throw new ArgumentNullException("binding");

    var needsUpdateProperty = typeof(BindingExpressionBase).GetProperty("NeedsUpdate",BindingFlags.Instance | BindingFlags.NonPublic);
    var isDirtyAsObject = needsUpdateProperty.GetValue(binding,null);
    if (isDirtyAsObject is bool)
        return (bool)isDirtyAsObject;

    return false;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读