C# 当属性发生内部更改时,如何将控件绑定到属性更改?

C# 当属性发生内部更改时,如何将控件绑定到属性更改?,c#,wpf,C#,Wpf,我想将控件绑定到实例的属性。但是,此属性将在内部更改,因此INotifyPropertyChanged无法正常工作 例如,我想显示某个容器中当前存在多少元素。所以我的选择是将计数绑定到标签上,或者什么。但即使Count属性已更改为另一个数字,UI也不会更改 我不希望所有的东西都有包装器类,因为包装器不能解决问题的子集。另一个例子是,如果我想知道一个计时器需要多长时间才能过期,它会在内部发生变化,我甚至没有包装器来帮助我 那么,当将控件绑定到任何属性时,解决这个问题的一般方法是什么呢?有很多方法

我想将控件绑定到实例的属性。但是,此属性将在内部更改,因此INotifyPropertyChanged无法正常工作

例如,我想显示某个容器中当前存在多少元素。所以我的选择是将计数绑定到标签上,或者什么。但即使Count属性已更改为另一个数字,UI也不会更改

我不希望所有的东西都有包装器类,因为包装器不能解决问题的子集。另一个例子是,如果我想知道一个计时器需要多长时间才能过期,它会在内部发生变化,我甚至没有包装器来帮助我


那么,当将控件绑定到任何属性时,解决这个问题的一般方法是什么呢?

有很多方法

可以使用要绑定到的控件的databindings属性。以下内容将引导您找到更好的答案:

或者,您可以使用自定义事件,只需在具有控件的窗体上注册这些事件。触发事件时,在必要时处理该事件

例如:

在模型类中:

class myModel
{
   public event EventHandler OnNameChanged(object sender, NameChangedEventArgs e); = delegate { };

   private _name;
   public string Name 
   { 
      get { return _name; } 
      set 
      {
         _name = value;

         if (OnNameChanged != null)
            OnNameChanged(this, new NameChangedEventArgs(value))
      } 
   }
}

public class NameChangedEventArgs : EventArgs
{
   private _name;

   public NameChangedEventArgs(string name) { _name = name; }
   public Name { get { return _name; } }
}
然后在您的表格中,注册参加活动:

public class form1
{
   private myModel model;

   public form()
   {
      Initialize();
   }

   private void Initialize()
   {
      model.OnNameChanged += new EventHandler(model_OnNameChangedEvent);
   }

   private void model_OnNamedChangedEvent(object sender, NameChangedEventArgs e)
   {
      textbox.text = e.Name;
   }
}

现在,当model.Name更改时,将触发模型的OnNameChanged事件。任何已注册到该事件的对象都可以以自己的方式处理它。

如果能看到代码的和平,就很好地理解您的问题到底是什么。计时器有一个事件。如果没有事件或可绑定属性,则仍然可以轮询值。是否查看了BindingSource。。?