WPF .Net 4 - OneWayToSource 绑定到只写属性适用于某些机器!如何?

Posted

技术标签:

【中文标题】WPF .Net 4 - OneWayToSource 绑定到只写属性适用于某些机器!如何?【英文标题】:WPF .Net 4 - OneWayToSource binding to write-only property works on some machines! How? 【发布时间】:2013-02-04 17:38:30 【问题描述】:

我最近在我们的代码中添加了一个 OneWayToSource 绑定到视图模型中的只读属性。当时我不知道.Net 4的变化,当没有getter时这会导致异常:

<Popup IsOpen="Binding IsPopupOpen, Mode=OneWayToSource" />
...
public bool IsPopupOpen

    set
    
        // do something with value
    

问题是,这段代码在我的电脑上运行,不会引发异常。完全相同的可执行文件在其他机器上不起作用 - 弹出窗口没有打开,并且引发了预期的异常。我无法弄清楚这怎么可能?该项目针对 .Net FW 4。

我确保清除我的 bin 文件夹并重建,但它仍然在我的机器上毫无例外地工作,而不是在其他机器上。

我知道如何“解决”这个问题 - 只需在属性中添加一个 getter。但是我需要弄清楚程序在不同机器上的运行方式有何不同,因为这可能会导致其他严重问题......

编辑:

这快把我逼疯了!我使用 Snoop WPF 实用程序查看我的弹出窗口,似乎根本没有绑定到 IsOpen(绑定是 XAML 的新增功能)。但是,如果我将调试器附加到应用程序并在绑定属性的设置器内设置断点,它会命中我的断点!!

【问题讨论】:

你的意思是只写属性吗? 顺便说一句,不知道这个变化,谢谢。 谢谢,我的意思是只写 :) 修正了标题。 有什么进展吗?也想知道不同行为的原因。 谢谢,这似乎在 4.5 中恢复了,我们的目标机器上只有 4.0。 【参考方案1】:

有点猜测。

在 net 4.0 中进行此更改后,他们决定使其在 .net 4.5 中更加一致,这似乎是合理的:如果 getter 存在,则将属性重新读回 UI,否则不会发生任何可怕的事情并且不会引发异常。

如果是这样并且您安装了 .net 4.5,您可以获得这种行为而不是预期的行为。 我们遇到过将 4.5 的更新以静默方式传播到 4.0 的情况。

【讨论】:

非常感谢!我要对此进行测试 - 我的同事在他的机器上有 4.5,他很确定它在他的机器上不起作用。所以我需要在我们有时间的时候在他的机器上重新测试。 遇到了同样的问题,安装了 .NET 4.5 就可以了。

以上是关于WPF .Net 4 - OneWayToSource 绑定到只写属性适用于某些机器!如何?的主要内容,如果未能解决你的问题,请参考以下文章

.NET 4 WPF Datagrid 和 WPF Toolkit Datagrid 之间的差异

将 WPF 从 .NET 4 更新到 4.5.2,DataGridTextColumn Visibility DataContext 引用损坏

WPF .Net 4 - OneWayToSource 绑定到只写属性适用于某些机器!如何?

WPF .Net 4 - OneWayToSource 绑定到只写属性适用于某些机器!如何?

WPF 多重绑定 .Net Framework 4.0

.net 4.5 中可绑定的 WPF Richtextbox