为啥绑定表达式在 OneWay 模式下分离?

Posted

技术标签:

【中文标题】为啥绑定表达式在 OneWay 模式下分离?【英文标题】:Why does binding expression detach in OneWay mode?为什么绑定表达式在 OneWay 模式下分离? 【发布时间】:2016-05-09 12:30:07 【问题描述】:

谁能解释一下为什么在我单击 checkBox3 对象后第一个绑定表达式被分离...

<StackPanel>
    <CheckBox x:Name="chackBox1" Content="CheckBox1"
        IsChecked="Binding ElementName=chackBox2, Path=IsChecked, Mode=OneWay" />
    <CheckBox x:Name="chackBox2" Content="CheckBox2" IsChecked="False" />
    <CheckBox x:Name="chackBox3" Content="CheckBox3"
        IsChecked="Binding ElementName=chackBox1, Path=IsChecked, Mode=TwoWay" />
</StackPanel>

...并且在以下情况下不会发生...

<StackPanel>
    <CheckBox x:Name="chackBox1" Content="CheckBox1"
        IsChecked="Binding ElementName=chackBox2, Path=IsChecked, Mode=TwoWay" />
    <CheckBox x:Name="chackBox2" Content="CheckBox2" IsChecked="False" />
    <CheckBox x:Name="chackBox3" Content="CheckBox3"
        IsChecked="Binding ElementName=chackBox1, Path=IsChecked, Mode=TwoWay" />
</StackPanel>

...在第一个绑定表达式中 Mode 更改为 TwoWay 的地方?

我只是要求解释。我知道如何省略这种棘手的情况,也知道如何调试绑定表达式。我发现了类似的帖子here,但我的一般问题没有明确的答案。

【问题讨论】:

OneWay 通常与TextBlock 一起使用,因为绑定只能以一种方式工作,即来自 Source->UIElement。 【参考方案1】:

在您的第一个场景中,checkbox1 具有OneWay 绑定,因此除了通过 checkbox2 之外,不能接受对其值的更改。如果 checkbox3 尝试设置 checkbox1 那么它将使绑定无效,并将其设置为原始值。

如果您希望 checkbox3 设置 checkbox1(更新 checkbox2)而不是 OneWay 绑定,您需要 OneWayToSource

【讨论】:

以上是关于为啥绑定表达式在 OneWay 模式下分离?的主要内容,如果未能解决你的问题,请参考以下文章

有哪些不同的 WPF 绑定模式?

WPF的5种绑定模式(mode)

ASP .NET Web 窗体 - 为啥父级不使用数据绑定表达式调用自定义控件的属性设置器?

为啥 Vue 绑定 <g-image> 中的 javascript 表达式不起作用?

为啥这个正则表达式模式不匹配? [复制]

为啥这个正则表达式模式不能按预期工作?