WPF视图无法在更改contentControl绑定属性时呈现

时间:2011-07-06 07:05:02

标签: wpf view rendering contentcontrol

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

XMAL:

<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();

ON PROPERTY CHANGED:

    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 framework 4.0

1 个答案:

答案 0 :(得分:1)

之前我遇到过这个问题,这是由我使用:

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

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

相关问题