从后台代码多次调用SetBinding



我有多个c#对象,当属性发生变化时需要通知(属性属于FrameworkElement,如按钮或列表框)。

我使用SetBinding方法测试绑定单个对象,如下所示:

// DepOb is my FrameworkElement
// DepPropDesc is the DependencyPropertyDescriptor
System.Windows.Data.Binding bind = new System.Windows.Data.Binding();
bind.Source = this;
bind.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
bind.Path = new PropertyPath("Value");
bind.Mode = ob.BindingMode;
DepOb.SetBinding(DepPropDesc.DependencyProperty, bind);

但是当我创建第二个对象并绑定它时,第一个对象不再被调用。如果我在行与行之间阅读,该方法将设置为绑定,因此前一个被刷新,对吗?

MSDN讨论了一个"多绑定"对象,但我不知道如何"获取"存储在多绑定中的以前的绑定,以便我可以向它添加新的绑定。

我将继续搜索,但我想看看这里是否有人知道我可能做错了什么。

提前感谢!

Seb

要绑定到第一个对象的第二个对象上设置绑定。当在第二个对象上设置绑定时,可能在第二个对象上设置的值将丢失,而第一个对象的值可用于读写(当设置为TwoWay时)。

grid2.SetBinding(FrameworkElement.WidthProperty, new Binding("ActualWidth") { Source = grid1 });

如果你有一个grid3你还可以这样做:

grid3.SetBinding(FrameworkElement.WidthProperty, new Binding("ActualWidth") { Source = grid1 });

在这个例子中,WidthProperty是定义在FrameworkElement上的静态只读属性,grid2和grid3继承自FrameworkElement,所以它们可以使用这个属性。

在你的代码中,你需要写这样的东西(注意BindingMode。单向模式)。
System.Windows.Data.Binding bind = new System.Windows.Data.Binding();       
bind.Source = this;       
bind.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;       
bind.Path = new PropertyPath("Value");       
bind.Mode = BindingMode.OneWay;
DepOb.SetBinding(DepObClass.WidthOrSomethingProperty, bind);

因为你是绑定到一个实例(DepOb),你需要在它的类定义上定义实际的属性(或使用继承的属性),如:

public static readonly DependencyProperty WidthOrSomethingProperty = DependencyProperty.Register("WidthOrSomething", typeof(double), typeof(DepObClass), null);
在DepObClass的实现中,你应该这样定义你的属性:
public double WidthOrSomething
{
     get { return GetValue(WidthOrSomethingProperty); }
     set { SetValue(WidthOrSomethingProperty, value); }
 }

希望对你有帮助。

相关内容

  • 没有找到相关文章

最新更新