を変える上でレンダリングません。WPFビューは、私は、コンテンツコントロールにバインドされたプロパティを使用して、私のメインウィンドウにユーザーコントロールを変更していますContentControlにバインドプロパティ
のXmaI:
<ContentControl Grid.Row="0" Content="{Binding MainContent, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"></ContentControl>
PROPERTY:
private UserControl _mainContent;
public UserControl MainContent
{
get
{
return _mainContent;
}
set
{
_mainContent = value;
OnPropertyChanged();
}
}
CODE BEHIND:PROPERTY ON
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など)、このメカニズムを使用してusercontrolsを変更すると、アプリケーションがハングします。
私のログを見ると、変更コマンドが受信され、新しいユーザーコントロールがインスタンス化され、コンストラクタが実行されます。メインコンテンツプロパティが設定され、OnPropertyChangedイベントが発生すると、
が表示されます。アプリケーションがハングし、ウィンドウが反応しないと表示され、アプリケーションが終了します。
ユーザーコントロールのOnLoadedイベントが発生することはありません。
これは、特定のマシン上でこのよう任意のユーザーコントロールをロードするに起こります。
アイデア、コメントはすべて歓迎されています。アイデアをデバッグする方法を歓迎します。
更新: これはテストマシンなので、非常に頻繁に再起動されません。
我々はマシンを再起動すると、問題が去っていきました。 私はまだ、なぜこれをやり直すのかを知りたいです。
PS。ターゲットプラットフォームはx86で問題マシンはx64ですが、他のウィンドウ7 x64では問題はありませんでした。
protected virtual void OnPropertyChanged()
{
string propertyName = new System.Diagnostics.StackTrace().GetFrame(1).GetMethod().Name.Substring(4);
OnPropertyChanged(propertyName);
}
あなたの性質をリリースモード(そしておそらく、コンパイル時に)ので、プロパティ名にインライン化取得を:私たちは、私はこの前に一度、それは使用して私によって引き起こされたに走ったの.NET Framework 4.0
どのバージョンのフレームワークをターゲットにしていますか?ビルド設定(x86/any/x64)とは何ですか?ターゲットマシンはWindows 32または64bitですか?私は最近、あるマシン(Win 7 64ビットで "任意のCPU"用にビルドされたもの)にいくつかの奇妙な動作があり、x64のビルドのみを助けました。 – hyp
MainContentプロパティを依存プロパティに変換してみてください。 ウィンドウに名前を付け、{Binding ElementName = myWindow、Path = MainContent}のようなElementName構文を使用して、xamlのウィンドウのコードの後ろに定義された依存関係プロパティをバインドできます。そのちょうど推測。それが役立つかどうかを見てください。 バインディングをPresentationTraceSources.TraceLevel = Highに追加して、出力が有用なものを返すかどうかを確認することもできます。 それ以外の場合は、コードではなく、マシインの問題を推測します。 – dowhilefor