我最近在代码中将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的新增功能)。但是,如果我将调试器附加到应用程序并在绑定属性的setter中设置断点,它会触及我的断点!!
答案 0 :(得分:2)
有点猜测。
有理由认为,在net 4.0中进行此更改后,他们决定在.net 4.5中使其更加一致:如果getter exists属性重新读回UI,否则不会发生任何可怕的事情并且不会抛出任何异常。
如果是,并且安装了.net 4.5,则可以获得此行为而不是预期的行为 我们遇到了4.5的更新以静默方式传播到4.0的情况。