暂停控件的数据绑定

GWL*_*osa 14 .net c# data-binding wpf user-interface

我有一系列控件,它们数据绑定到每秒钟左右变化的值.有时,我需要"暂停"控件,这样他们就不会更新数据绑定(在任何一个方向上).然后,我需要"取消暂停"控件,以便他们可以使用其值更新数据源,并正常接收来自源的未来更新.我该如何做到这一点?

样本绑定:

<TextBox Text="{Binding UpdateSourceTrigger=LostFocus, Mode=TwoWay, Path=myData}">
Run Code Online (Sandbox Code Playgroud)

Rob*_*ney 12

您不一定要暂停绑定.另一种可能更简单的方法是在视图模型中暂停更改通知.例如:

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();
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

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

这不会阻止更改绑定控件以更新视图模型.我向你提交,如果你让用户在屏幕上编辑属性,同时你在后台更改它们,那么你需要仔细查看一些内容,而且它不具有约束力.