如何在代码隐藏中创建未指定路径的绑定?

时间:2011-12-01 15:34:07

标签: c# wpf binding

我正在回答another question关于在代码隐藏中创建绑定的问题,而我最初的回答是发布未指定Path的绑定代码。此绑定编译正常,但值永远不会更新。如果我更改绑定以使用路径,它可以正常工作。

这是为什么?在没有Path的代码隐藏中创建绑定的正确方法是什么?例如,如何在代码隐藏中重新创建Value="{Binding }"

非工作代码:

Binding b = new Binding();
b.Source = SomeInt;
b.Mode = BindingMode.OneWay;
MyProgressBar.SetBinding(ProgressBar.ValueProperty, b);

SomeInt = 50;

工作代码:

Binding b = new Binding();
b.Source = this;
b.Path = new PropertyPath("SomeInt");
MyProgressBar.SetBinding(ProgressBar.ValueProperty, b);

SomeInt = 50;

2 个答案:

答案 0 :(得分:3)

绑定引擎订阅INPCDP - Source对象上的更改(以及Path上的非离开),并检查{{1}属性/属性被更改了。如果没有Path则没有通知。一个相当不幸的缺点。

(我可能会过度简化系统,但实质上是没有源更改的更新,它们不会也无法监控)


Path相当于{Binding}(没有其他属性),此绑定可能会更新,因为有new Binding()更改的事件。

答案 1 :(得分:1)

Binding.Source的输入为System.Object。所以当你这样做时:

b.Source = SomeInt;

您要将值类型(System.Int32)分配到System.Object类型的内容中,这意味着您将获得原始值的盒装副本。

盒装副本存在于堆上,与原始变量无关。修改原始变量时,盒装副本没有任何反应。