WPF绑定在调试器

时间:2017-10-23 11:20:19

标签: c# wpf visual-studio-debugging

查看:

<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之后)。显然,在那时诊断和修复成本会高得多。所以我正在寻找一个解决方案,其中应用程序的行为相同,无论它是否附加了调试器,或者应用程序因双向绑定而总是崩溃,或者因为正确选择了单向绑定而永远不会崩溃通过框架。

0 个答案:

没有答案