我有一个地图图块设置,我正在通过菜单按钮进行更新。我遇到了一个奇怪的情况,我只在发布版本上遇到错误。代码如下:
视图模型
private KnownTileSource _selectedTile;
public KnownTileSource SelectedTile
{
get { return _selectedTile; }
private set
{
_selectedTile = value;
...
OnPropertyChanged("SelectedTile");
}
}
View
<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>
这在我的开发环境中一切正常,但是当我生成发布版本时,我得到以下信息:
Error
System.InvalidOperationException: A TwoWay or OneWay ToSource binding cannot work on the read-only property 'SelectedTile'...
简单的解决方案,改变private set
to set
在上面的SelectedTile
财产。
那么为什么这不会在调试期间抛出错误而仅在发布期间抛出错误呢?我看不出它在调试模式下是如何工作的。
这是一个已修复的已知错误: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+,则可能会出现此行为。
你应该删除private
来自设置器的关键字来解决问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)