在ContentControl崩溃中绑定

ImJ*_*mes 11 wpf xaml binding contentcontrol

任何人都可以告诉我为什么这会崩溃我的应用程序?似乎有一些无休止的递归,我无法弄清楚为什么.我得到了这个例外

遍历树时超出了逻辑树深度.这可能表明树中有一个循环

<ContentControl Content="{Binding}">
    <ContentControl.ContentTemplate>
        <DataTemplate>
            <Button Content="{Binding MyString}"/>
        </DataTemplate>
    </ContentControl.ContentTemplate>
</ContentControl>
Run Code Online (Sandbox Code Playgroud)

这就是我所拥有的所有资源

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

    public string MyString { get; set; }
Run Code Online (Sandbox Code Playgroud)

Joh*_*wen 17

您使用MainWindow作为MainWindow内容的DataContext.在Content="{Binding}"ContentControl上设置时,这会将ContentControl的内容设置为MainWindow实例.这是一个问题,因为ContentControl包含在MainWindow的内容中.每当Content属性接收到UIElement时,它都会将其呈现为UIElement,而不是像非UI类那样通过DataTemplate呈现.所以你的树最终成了

MainWindow
 ContentControl
  MainWindow
   ContentControl
    ...
Run Code Online (Sandbox Code Playgroud)

为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; }
}
Run Code Online (Sandbox Code Playgroud)