2011-07-06 4 views
1

を変える上でレンダリングません。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

+0

どのバージョンのフレームワークをターゲットにしていますか?ビルド設定(x86/any/x64)とは何ですか?ターゲットマシンはWindows 32または64bitですか?私は最近、あるマシン(Win 7 64ビットで "任意のCPU"用にビルドされたもの)にいくつかの奇妙な動作があり、x64のビルドのみを助けました。 – hyp

+0

MainContentプロパティを依存プロパティに変換してみてください。 ウィンドウに名前を付け、{Binding ElementName = myWindow、Path = MainContent}のようなElementName構文を使用して、xamlのウィンドウのコードの後ろに定義された依存関係プロパティをバインドできます。そのちょうど推測。それが役立つかどうかを見てください。 バインディングをPresentationTraceSources.TraceLevel = Highに追加して、出力が有用なものを返すかどうかを確認することもできます。 それ以外の場合は、コードではなく、マシインの問題を推測します。 – dowhilefor

答えて

1

を使用していますスタック検索によって正しく識別されませんでした...

+0

このように 'StackTrace'を使うと、コードが最適化されたときにメソッドのインライン展開が行われるため危険です。この特定の実装は、メソッドが '仮想的であるため動作する可能性があります。したがって、インライン化されません。 –

関連する問題