Laden...

Binding entsprechend gebundenen Object verändern

Erstellt von Taladan vor 14 Jahren Letzter Beitrag vor 14 Jahren 834 Views
Taladan Themenstarter:in
582 Beiträge seit 2008
vor 14 Jahren
Binding entsprechend gebundenen Object verändern

Hallo,

ich binde ein paar Komponenten an eine ListView. Diese enthält unterschiedliche Objekte die passend angezeigt werden.

Im Detailbereich (ausserhalb der eigendlichen Liste) wird über ein TabItem der die möglichen Änderungsparameter angezeigt. z.b. bei Typ1 TabItem1 usw. Das funktioniert auch. Ebenfalls funktionieren meine Bindings.

Jedoch bekomme ich Debuggerfehler, wenn selecteditem nicht die entsprechenden eigenschaften enthalten. verständlich, denn nicht jedes element hat beispielsweise eine Breiteneigenschaft. Wie kann ich diese Debuggerfehler verhindern?

Gruß dat Tala

6.862 Beiträge seit 2003
vor 14 Jahren

Hallo,

irgendwie hab ich nicht verstanden wie du was in den Tabs anzeigst 😕

Aber was funktionieren müsste ist, dass du für die verschiedenen Typen jeweils eigene DataTemplates definierst und du zur Anzeige der Details einfach ein ContentControl benutzt welches gegen die Liste gebunden ist, die du in der ListView anzeigst. Je nach Item was dann im ContentControl angezeigt wird, wird dann das entsprechende DataTemplate benutzt.

Baka wa shinanakya naoranai.

Mein XING Profil.

Taladan Themenstarter:in
582 Beiträge seit 2008
vor 14 Jahren

Sobald mein treeview/listview das event selectedindexchange auslößt, wird entsprechend das TabControl auf die Richtige seite gelegt. Es wird der Typ des DataContextes abgerufen und verglichen.

Gruß dat Tala

6.862 Beiträge seit 2003
vor 14 Jahren

Und was zeigst du im Tab alles an? Hast du mehrere Seiten wo du z.b. auf Seite 1 die Eigenschaften A,B,C anzeigst bzw. bearbeiten willst und auf Seite 2 die Eigenschaften D,E,F usw. Und dann hast du in der ListView verschiedene Objekte wo ein Objekt die Eigenschaften A,B,C und nen anderes Objekt Eigenschaften D,E,F hat und jetzt weist du dem DataContext des TabControls das Item hinzu und willst je nach Typ die richtige Seite anzeigen. Hab ich das soweit richtig verstanden?

Problem ist jetzt z.b. Seite 1 angezeigt wird und auch alles tut da das Objekt die Eigenschaften besitzt, aber Seite 2 die zwar nicht angezeigt wird, aber trotzdem versucht die Eigenschaften zu binden macht jetzt Probleme.

Oder hab ich das komplett falsch verstanden?

Falls das Problem so ist, würde meine Idee im letzten Beitrag funktionieren. Du hast zwar kein Tab, aber was bringt es dir TabItems zu zeigen die man eh für das betreffende Objekt nicht benutzen kann?

Baka wa shinanakya naoranai.

Mein XING Profil.

Taladan Themenstarter:in
582 Beiträge seit 2008
vor 14 Jahren

Beispiel:

Listviewitem ist typ1 dann Tabitem 1 mit eigenschaft pfad
Listviewitem ist typ2 dann Tabitem 2 mit eigenschaften breite, höhe, pfad, document
Listviewitem ist typ3 dann Tabitem 3 mit eigenschaften dimensionen, pfad, document, Schlagworte

Die ListView und alle Elemente machen das was sie sollen. Jedoch erhalte ich wenn ich z.b. Typ 1 anwähle aus den Elementen des tabitems2 und 3 debuggerfehlermeldungen, da die Eigenschaften nicht Existieren.

z.B. eine bindung für eine Textbox im Tabitem 1

<Binding ElementName="tv" Path="SelectedItem.Path" UpdateSourceTrigger="PropertyChanged" />  

z.B. eine bindung für eine Textbox im TabItem2


<Binding ElementName="tv" Path="SelectedItem.dimensionen" UpdateSourceTrigger="PropertyChanged" />    

Ist mir erst gar nicht aufgefallen, weil alles ja so funktioniert, wie ich wollte, aber dann guckte eich wegen einen anderen problem auf die Debuggermeldungen und da waren dann die Probleme zu sehen.

Die Debuggermeldungen kommen wohl zu stande, weil das Framework versucht zu Binden, auch wenn die elemente nicht angezeigt werden (oder gar disabled sind)

Gruß dat Tala

6.862 Beiträge seit 2003
vor 14 Jahren

Naja,

ist ja auch so ein wenig naiv gestaltet mit den festen Bindungen. Ich würde das immer noch ohne TabControl machen da man ja eh mit den anderen Tabs nichts anfangen kann wenn das Item nicht die Eigenschaften hat.

Aber auch mit deinem Vorgehen könnte mans doch einfach so lösen dass du nicht gegen das Item direkt bindest, sondern gegen den DataContext des TabItems und du beim selektieren einfach nur das Item als DataContext des entsprechenden TabItems setzt. Somit hat auch nur das TabItem was mit dem Objekt was anfangen kann das jeweile Objekt.

Baka wa shinanakya naoranai.

Mein XING Profil.

Taladan Themenstarter:in
582 Beiträge seit 2008
vor 14 Jahren

Wie wäre den dein Lösungsansatz, also ohne Tabs?

Gruß dat Tala

6.862 Beiträge seit 2003
vor 14 Jahren

Wie in der ersten Antwort beschrieben 😃 Ein ContentControl mit passenden DataTemplates.

Baka wa shinanakya naoranai.

Mein XING Profil.

Taladan Themenstarter:in
582 Beiträge seit 2008
vor 14 Jahren

(seufz WPF ist echt kompliziert)

Aber ein DataTemplateSelector kann man doch nur einen Treeview und co anheften. Wie soll das mit einen ContentControl gehen?

Gruß dat Tala