gpt4 book ai didi

c# - 暂停控件的数据绑定(bind)

转载 作者:可可西里 更新时间:2023-11-01 07:55:55 24 4
gpt4 key购买 nike

我有一系列控件,这些控件数据绑定(bind)到每秒左右变化的值。有时,我需要“暂停”控件,这样它们就不会更新它们的数据绑定(bind)(在任一方向)。然后,我稍后需要“取消暂停”控件,以便它们可以使用它们的值更新数据源,并像往常一样从源接收 future 的更新。我该如何实现?

示例绑定(bind):

<TextBox Text="{Binding UpdateSourceTrigger=LostFocus, Mode=TwoWay, Path=myData}">

最佳答案

您不一定非要暂停绑定(bind)。另一种可能更简单的方法是在 View 模型中暂停更改通知。例如:

private HashSet<string> _ChangedProperties = new HashSet<string>();

private void OnPropertyChanged(string propertyName)
{
if (_Suspended)
{
_ChangedProperties.Add(propertyName);
}
else
{
PropertyChangedEventHandler h = PropertyChanged;
if (h != null)
{
h(this, new PropertyChangedEventArgs(propertyName));
}
}
}

private bool _Suspended;

public bool Suspended
{
get { return _Suspended; }
set
{
if (_Suspended == value)
{
return;
}
_Suspended = value;
if (!_Suspended)
{
foreach (string propertyName in _ChangedProperties)
{
OnPropertyChanged(propertyName);
}
_ChangedProperties.Clear();
}
}
}

Suspended 设置为 true 时,这将(如果它经过调试和测试,我还没有这样做)停止引发 PropertyChanged 事件,并且当 Suspended 再次设置为 false 时,它将为暂停期间更改的每个属性引发事件。

这不会阻止对绑定(bind)控件的更改更新 View 模型。我向您提出,如果您让用户在屏幕上编辑属性的同时在后台更改它们,则您需要仔细查看一些内容,并且它不具有约束力。

关于c# - 暂停控件的数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4962430/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com