C# 如何在代码隐藏中创建一个不';不指定路径?

C# 如何在代码隐藏中创建一个不';不指定路径?,c#,wpf,binding,C#,Wpf,Binding,我回答了关于在code behind中创建绑定的问题,我最初的回答是发布没有指定路径的绑定代码。此绑定可以很好地编译,但是该值永远不会更新。如果我将绑定更改为使用路径,它就可以正常工作 为什么会这样?在没有路径的代码隐藏中创建绑定的正确方法是什么?例如,如何在代码隐藏中重新创建Value=“{Binding}” 非工作代码: Binding b = new Binding(); b.Source = SomeInt; b.Mode = BindingMode.OneWay; MyProgress

我回答了关于在code behind中创建绑定的问题,我最初的回答是发布没有指定路径的绑定代码。此绑定可以很好地编译,但是该值永远不会更新。如果我将绑定更改为使用路径,它就可以正常工作

为什么会这样?在没有路径的代码隐藏中创建绑定的正确方法是什么?例如,如何在代码隐藏中重新创建
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;
工作代码:

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;

绑定引擎订阅
对象上的和-更改(以及
路径
上的非叶子),并检查
路径
属性/属性是否已更改。如果没有
路径
,则没有通知。一个相当不幸的缺点

(我可能有点过于简化了系统,但本质是没有对源代码更改的更新,它们没有也无法被监控)


{Binding}
相当于
新绑定()
(无其他属性),此绑定可能会更新,因为有
数据上下文
更改的事件。

类型为
系统.对象
。所以当你这样做的时候:

b.Source = SomeInt;
您正在将一个值类型(
System.Int32
)赋给类型为
System.Object
,这意味着您将获得原始值的装箱副本


装箱副本位于堆上,与原始变量无关。修改原始变量时,盒装副本不会发生任何变化。

这可能也是正确的:
INPC
说明更改了哪个属性。没有说“整个对象已更改”的机制。@JoeWhite但是我可以将绑定设置为nothing(
{binding}
),并且
属性更改
通知工作正常。在代码隐藏中没有这样做的方法吗?@Rachel:那是因为有DataContext更改的通知,但这是规则的一个例外。@H.B.你能建议代码隐藏语法,它相当于
{Binding}
?@Rachel:那只是
新绑定()
,没有源代码,没有路径,没有其他。