我正在使用内容控件上的绑定属性更改主窗口上的用户控件。
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
答案 0 :(得分:1)
之前我遇到过这个问题,这是由我使用:
造成的protected virtual void OnPropertyChanged()
{
string propertyName = new System.Diagnostics.StackTrace().GetFrame(1).GetMethod().Name.Substring(4);
OnPropertyChanged(propertyName);
}
您的属性在发布模式下(也许在编译期间)内联,因此堆栈搜索无法正确识别属性名称...