查看:
<Window x:Class="WpfTextCrashTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfTextCrashTest">
<Window.DataContext>
<local:ViewModel />
</Window.DataContext>
<TextBlock>
<TextBlock.Inlines>
<Run Text="{Binding StringToBind}" />
</TextBlock.Inlines>
</TextBlock>
</Window>
视图模型:
public class ViewModel : INotifyPropertyChanged
{
public ViewModel()
{
StringToBind = "To bind";
}
public string StringToBind { get; private set; }
public event PropertyChangedEventHandler PropertyChanged;
// binding to this works:
public string Works { get { return "To bind"; } }
}
如果我在调试器(Visual Studio中的F5)中运行上述应用程序,它运行正常,文本显示在视图上。不会抛出任何异常,也不会在输出窗口中输出错误消息。另一方面,如果我在调试器之外运行它(在Visual Studio中为Ctrl + F5),我会得到一个XamlParseException,其中包含类型为InvalidOperationException的InnerException,并带有以下消息: &#34; TwoWay或OneWayToSource绑定不能用于只读属性&#39; StringToBind&#39;类型&#39; WpfTextCrashTest.ViewModel&#39;。&#34;
如果不是绑定到ViewModel
属性StringToBind
而是绑定到Works
,则不会发生错误。
任何人都可以解释:
修改 为了澄清,我更感兴趣的是附加的调试器对如何修复xaml / view模型的影响。如果所有测试都是由使用本地构建的开发人员完成的,那么这种bug有可能在开发过程中蔓延并长期存在(可能在故事发布到master之后)。显然,在那时诊断和修复成本会高得多。所以我正在寻找一个解决方案,其中应用程序的行为相同,无论它是否附加了调试器,或者应用程序因双向绑定而总是崩溃,或者因为正确选择了单向绑定而永远不会崩溃通过框架。