1

我正在使用内容控件上的绑定属性更改主窗口上的用户控件。

圣诞节:

<ContentControl Grid.Row="0" Content="{Binding MainContent, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"></ContentControl>

财产:

private UserControl _mainContent;
public UserControl MainContent
{
  get
  {
    return _mainContent;
  }
  set
  {
    _mainContent = value;
    OnPropertyChanged();
  }
}

代码背后:

MainContent = new TestUserControl();

关于财产变更:

    public event PropertyChangedEventHandler PropertyChanged;

protected virtual void OnPropertyChanged(string propertyName)
{
  if (this.PropertyChanged != null)
  {
    this.PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
  }
}

protected virtual void OnPropertyChanged()
{
  string propertyName = new System.Diagnostics.StackTrace().GetFrame(1).GetMethod().Name.Substring(4);
  OnPropertyChanged(propertyName);
}

我的问题是在一台特定的测试机器上(与其他机器类似,没有什么独特或奇怪的。Windows 7、4GB Ram 等),当使用这种机制更改用户控件时,应用程序挂起。

查看我的日志,收到更改命令,实例化新用户控件,构造函数运行。设置主要内容属性,触发 OnPropertyChanged 事件

然后什么都没有。应用程序挂起,windows 说它没有响应并关闭应用程序。

用户控件的 OnLoaded 事件永远不会被触发。

这发生在以这种方式在特定机器上加载任何用户控件时。

欢迎提出想法,评论。欢迎提出如何调试这个的想法。

更新: 由于这是一台测试机器,它不会经常重启。

一旦我们重新启动机器,问题就消失了。我仍然想知道为什么以及如何阻止这种情况再次发生。

PS。目标平台是 x86,问题机器是 x64,但在另一个窗口 7 x64 上没有问题。我们正在使用 .net 框架 4.0

4

1 回答 1

1

我以前遇到过一次,它是由我使用引起的:

protected virtual void OnPropertyChanged()
{
  string propertyName = new System.Diagnostics.StackTrace().GetFrame(1).GetMethod().Name.Substring(4);
  OnPropertyChanged(propertyName);
}

您的属性在发布模式下(可能在编译期间)内联,因此堆栈搜索未正确识别属性名称......

于 2011-12-15T21:33:08.827 回答