13

これが私のアプリをクラッシュさせる理由を誰か教えてもらえますか? 理由がわからないという無限の再帰があるようです。この例外が発生します

ツリーのトラバース中に、論理ツリーの深さを超えました。これは、ツリーのサイクルを示している可能性があります

<ContentControl Content="{Binding}">
    <ContentControl.ContentTemplate>
        <DataTemplate>
            <Button Content="{Binding MyString}"/>
        </DataTemplate>
    </ContentControl.ContentTemplate>
</ContentControl>

そして、これは私がソースとして持っているすべてです

    public MainWindow()
    {
        InitializeComponent();
        MyString = "Test";
        this.DataContext = this;
    }

    public string MyString { get; set; }
4

3 に答える 3

19

MainWindow のコンテンツの DataContext として MainWindow を使用しています。Content="{Binding}"ContentControl を設定すると、ContentControl のコンテンツが MainWindow インスタンスに設定されます。ContentControl が MainWindow のコンテンツに含まれているため、これは問題です。Content プロパティが UIElement を受け取るたびに、非 UI クラスの場合のように DataTemplate を介してではなく、UIElement としてレンダリングします。だからあなたの木は結局

MainWindow
 ContentControl
  MainWindow
   ContentControl
    ...

ウィンドウ自体の代わりに DataContext に別のデータ オブジェクトを使用すると、探している動作が得られます。

public partial class Window13 : Window
{
    public Window13()
    {
        InitializeComponent();
        MyData data = new MyData();
        data.MyString = "Test";
        this.DataContext = data;
    }
}

public class MyData
{
    public string MyString { get; set; }
}
于 2010-12-23T19:21:33.147 に答える
0

ContentControlのContentプロパティのバインディングを削除する必要があります。とにかくこれは何をすることになっていますか?

于 2010-12-23T15:05:39.020 に答える