Quelqu'un peut-il me dire pourquoi cela bloque mon application? Il semble y avoir une récursion sans fin par je ne peux pas comprendre pourquoi. Je reçois cette exception
Profondeur d'arbre logique dépassé alors que traverser l'arbre. Cela pourrait indiquer un cycle dans l'arborescence p> blockQuote>
xxx pré> et c'est tout ce que j'ai comme source p>
xxx pré> p>
3 Réponses :
Vous devez supprimer la liaison sur la propriété de contenu du contenuControl. Qu'est-ce que c'est censé faire quand même? P>
Ma compréhension du contenuControl est que le DataContext de la base de données est le contenu du contenuControl et non du DataContext. Donc, si je l'enlève, je ne reçois pas de DataContext dans la catégorie DataTemplate pour lier du tout. Des idées?
Vous utilisez Mainwindow comme DataContext du contenu de Mainwindow. Lorsque vous définissez à l'aide d'un objet de données distinct pour votre DataContext au lieu de la fenêtre elle-même vous donnera le comportement que vous recherchez: P> content = "{Binding}" code> sur le contenuControl Ceci est en train de régler le contenu du contenuControl dans l'instance MainWindow. Ceci est un problème car le contenu contenus est contenu dans le contenu du MainWindow. Chaque fois qu'une propriété de contenu reçoit un uielement, il le rend comme un uielement, pas à travers le datatemplate car il serait avec une classe non-UI. Donc, votre arbre finit par être
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; }
}
John, tu es l'homme !! Fonctionne comme un charme :) Je peux enfin mettre ce problème derrière moi et je connais aussi la raison grâce à votre explication très claire! Merci et joyeux Noël
Bien que je suis totalement d'accord avec la réponse acceptée que vous ne devriez pas faire cela, parfois vous n'avez tout simplement pas le choix. Par exemple, j'utilise Xcee PapetmentGrid et le La solution que j'ai trouvée est d'utiliser un DataContext Code> J'ai pour chaque élément de la grille est un
PropertyItem code> Un
uielement code> (contenant les données réelles dans une valeur
code> membre).
contentpresenter code> au lieu d'un
contentcontrol code>. La documentation n'est pas claire à ce sujet, mais il semble que
uielement code> soit amplifié au lieu d'être utilisé tel quel. P>
<ContentPresenter Content="{Binding}">
<ContentPresenter.ContentTemplate>
<DataTemplate>
<Button Content="{Binding MyString}"/>
</DataTemplate>
</ContentPresenter.ContentTemplate>
</ContentPresenter>