【问题标题】:Private setter throwing error only on release build私人二传手仅在发布版本时抛出错误
【发布时间】:2017-10-16 12:07:49
【问题描述】:

我有一个通过菜单按钮更新的地图图块设置。我遇到了一个奇怪的情况,我只是在发布版本中遇到了错误。代码如下:

视图模型

private KnownTileSource _selectedTile;
public KnownTileSource SelectedTile
{
    get { return _selectedTile; }
    private set
    {
        _selectedTile = value;
        ...
        OnPropertyChanged("SelectedTile");
    }
}

查看

<Window ...
 xmlns:predefined="clr-namespace:BruTile.Predefined;assembly=BruTile">
...
    <MenuItem Header="_Bing Aerial" Command="{Binding ChangeTileCommand}" CommandParameter="{x:Static predefined:KnownTileSource.BingAerial}" IsChecked="{Binding Path=SelectedTile, Mode=TwoWay, Converter={local:EnumToBooleanConverter}, ConverterParameter=BingAerial}"/>
...
</Window>

这在我的开发人员环境中一切正常,但是当我生成发布版本时,我得到了以下信息:

错误

System.InvalidOperationException: A TwoWay or OneWay ToSource binding cannot work on the read-only property 'SelectedTile'...

简单的解决方案,将上述SelectedTile属性中的private set改为set

那么,为什么在调试期间没有抛出错误,而只是在发布期间抛出错误呢?我看不出它在调试模式下是如何工作的。

【问题讨论】:

  • 我自己也遇到过。对我来说,问题在于是否将调试器附加到进程,而不是应用程序是在调试还是发布模式下构建的。

标签: c# wpf mvvm


【解决方案1】:

这是一个已修复的已知错误:https://connect.microsoft.com/VisualStudio/feedback/details/773682/wpf-property-with-private-setter-is-updated-by-a-twoway-binding

因此,如果您的应用以 .NET Framework 4.0 为目标,但您的开发计算机上安装了 .NET Framework 4.5+,您可能会遇到这种情况。

您应该从 setter 中删除 private 关键字以解决此问题。

【讨论】:

    猜你喜欢
    • 2022-01-23
    • 2016-08-16
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 2014-10-16
    • 2018-12-06
    • 2011-07-10
    • 1970-01-01
    相关资源
    最近更新 更多