我正在使用内容控件上的绑定属性更改主窗口上的用户控件。
圣诞节:
<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