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

时间:2013-02-19 21:20:45

标签: .net wpf binding

我最近在代码中将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中设置断点,它会触及我的断点!!

1 个答案:

答案 0 :(得分:2)

有点猜测。

有理由认为,在net 4.0中进行此更改后,他们决定在.net 4.5中使其更加一致:如果getter exists属性重新读回UI,否则不会发生任何可怕的事情并且不会抛出任何异常。

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