Control gleichsetzen...

  • WPF

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Nofear23m.

    Control gleichsetzen...

    Hallo Leute und danke für's reinschauen.

    Weiß nicht genau wie ich die Frage stellen soll, dennoch versuche ich es ein wenig zu erklären...

    1) Angenommen, ich habe eine Oberfläche mit einem Visuellen Control A als Platzhalter... (Name CotnrolA)
    2) Weiterhin habe ich eine Globale Classe z.B. Global, die genau den selben Control beinhaltet, der dort initialisiert wird... Nennen wir den mal ControlB

    Jetzt bin ich davon ausgegangen, dass wenn ich
    ControlA = Global.ControlB
    mache, so wird der Control A zu kontrol B. Somit wird der Control A zu einer Referenz von Control B. Oder sehe ich das Falsch?

    Irgend wie funktioniert es scheinbar nur zu hälfte. Jedenfalls Eigenschaften werden übernommen, dennoch aktualisiert sich Control A nicht mehr.

    So, nun wer hat verstanden was ich meine, und wer kann mir helfen... :)

    Vielen Dank im Voraus
    Hallo EugenIS

    Ich denke ich kann erahnen was du vorhast. da du hier im Bereich WPF Bereich schreibst denke ich alerdings das du die Sache alsch angehst.
    Beschreib doch besser mal was du vorhast, also was dein Ziel ist. Vieleicht verstehen wir dann besser was du meinst. Oft ist es so das man selbst den Wald vor lauter Bäumen nicht sieht und die Lösung wo ganz wo anders liegt.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Also eigentlich wollte ich einen Control, in einer Klasse initialisieren... Zur Zeit mache ich das so:

    C#-Quellcode

    1. try
    2. {
    3. gMain.Children.Add(myItems.csControl_00);
    4. gMain.Children.Add(myItems.csControl_01);
    5. ...


    C#-Quellcode

    1. ​ csControl_00 _csControl_00 = null;
    2. public csControl_00 csControl_00
    3. {
    4. get
    5. {
    6. if (_csControl_00 == null)
    7. _csControl_00 = new csControl_00(csGlobalControl);
    8. return _csControl_00;
    9. }
    10. }


    Jedenfalls wollte ich, dass ein Control einen Construktor durchläuft...

    Was ich wollte ist so:

    csControl_00 = myItems.csControl_00;

    Wobei der csControl_00 nur ein Platzhalter in der WPF oberfläche ist und der myItems.csControl_00 wird vor der Zuweisung initialisiert.

    Ich kenne es nun mal so, das wenn du einem Objekt ein anderen zuweist, so werden die beiden gleich gesetzt und der zugewiesene zu einer Reference des ersten Objekts. Somit all das was mit dem ersten passiert, passiert mit dem zweiten auch, weil es ja nur eine Adresse zu den Ursprung ist.

    Vermutlich geht das bei WPF Control aber deswegen nicht, weil bei der Initialisierung die Fläche des Controls nicht bekannt ist. Somit kann er sich nicht richtig initialisieren. Das hatte ich schon mal in einem anderen Fall...

    Also werde ich mich vermutlich mit meinem Provisorium zufriedengeben müssen... :(
    Hallo

    Ja, soweit stimmt das. Aber in der Zeile _csControl_00 = new csControl_00(csGlobalControl);
    erstellst du ja mit new csControl_00(csGlobalControl); eine neue Instanz welche auch im speicher meines Wissens nach neu Belegt wird.

    Allerdings muss ich dir sagen das dieser Weg in der WPF der völlig falsche ist.
    In der WPf macht man solche Dinge über ein Binding.


    So hättest du eine Klasse welche unter anderem das Propertie currentContent vom Typ Object oder eines anderen Typs hat.
    Über DataTemplate legst du fest welche Objectart dargestellt werden soll, also durch welches Control.
    Weist du dem Propertie currentContent eine andere Klasse zu wechselt das Control.
    Hast du aber so wie in deinem Fall zwei mal das selbe Control auf die selbe Klasseninstanz gebunden verhalten sich diese control VÖLLIG gleich.

    Gerne kann ich dir ein Beispiel machen wenn du mir nicht folgen kannst.
    Schau die auf jeden Fall mal die funktionsweise von Binding an. Ist in der WPF unumgänglich.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Also wenn ich _csControl_00 = new... ist natürlich das ich es neu initialisiere. Das will ich ja auch. Was ich viel mehr wollte ist es einem Platzhalter in WPF zuweisen... Oder gleichsetzen...

    bei einer Gleichsetzung zwei Objekte bekommt man ja keine Kopie, sondern eigentlich nur eine Reference auf den Ursprung. Im Prinzip wollte ich damit das Binding umgehen...

    Du hast recht, normalerweise macht man all das in WPF durch Bindung usw... Leider halte ich das ganze noch nicht so ganz für ganz reifes System. Fehler, die hierbei entstehen können werden von VS nur zum Teil richtig gedeutet, sodass man teilweise echt sucht. Was mich wirklich nervt ist, wenn DB Zugriffe im Control erfolgen, so ensteht eine Exception selbst dann, wenn das Programm sich im Entwurf-Modus befindet. Dann sieht man den Control nicht und das ganze beginnt instabil zu werden.

    Die die das Lesen werden, werden vermutlich sich denken, was für ein Schwachkopf. Und ich habe es mit Bindung echt paar mal ausprobiert. Dennoch hat es mich nicht wirklich überzeugt. Geschwindigkeitsvorteile brachte es nicht. Und für das bisschen mehr Übersicht, nun ja, es kommt drauf an wie man es anstellt. Man kann es auch in altmodischer Art recht übersichtlich machen. Natürlich muss sich einer selbst um vieles kümmern. Dennoch funktioniert es einfach recht gut auch auf alte Art und Weise.
    Es soll ja auch keine Geschwindigkeitsvorteile bringen sondern einen schnelleren Entwicklungszyklus, du brauchst deine Daten nicht mehr manuell vom Formular zu deinen Services zu schaufeln. Ich denke du wirst jeden Programmierer fragen können dessen Framework DataBinding beherscht das, dass so ziemlich das geilste überhaupt ist.

    Für dich funktioniert es nicht weil du eine falsche Herangehensweise hast, ein Control baut niemals eine Datenbankverbindung auf sondern bekommt ein Daten Modell von einen Service o.a. Außerdem kann man in WPF ein DesignTime ViewModel einsetzen welches quasi als Dummy fungiert sodass deine Views kompilieren wo dein normales ViewModel einen Fehler geworfen hätte.

    Am Ende ist jedoch zusagen das jeder so programmieren kann und soll wie es sich richtig anfühlt, sobald man aber mit anderen zusammen arbeitet sollte man die Standards des jeweiligen Frameworks nutzen.
    Da muss ich euch beiden wieder recht geben. Gruppenentwicklung ist was anderes wie einzel-Entwicklung.

    Wobei ich echt sagen muss, dass Firmen, wo ich nun mal zu letz noch tätig war, haben nur zum Teil gutes WPF gekonnt, und anstatt die Leute zu Schulungen oder so etwas zu schicken wurde dort gekläckert wo es nur ging. Somit ist die "schnelle Entwicklung", sowie "Übersichtlichkeit", "Funktionalität" und sonstiges was wpf eigentlich verbessern sollte, einfach untergegangen.

    Somit habe ich mich einfach irgend wann für meinen Still entschieden, weil ich selbst hier teilweise fragen nicht beantwortet bekommen habe. Ganz bekannte frage von mir war mal mit dem Button... Hab einen Button gehabt, den ich für mich so entwickelt habe und musste irgend wann feststellen, dass das was gestern noch tat auf einmal ausblieb. Ohne einen ersichtlichen Grund für mich... Es hat immer funktioniert, und auf einmal nicht mehr. Woran das jetzt liegt wusste man selbst hier nicht so ganz.

    Somit bin ich ein wenig sachte mit rein WPF... Weil wenn es ausfällt, dann wird es schwierig die Lösung zu finden...
    Hallo

    Ich kommentiere jetzt nich lange die Vorteile von DataBinding. Ich brauch dir nur sagen das Programme wie MS Blend in MVVM erstellt wurden. Und wer MVVM schon praktiziert hat weis, hier geht ALLES mit Binding. Hier gibt es (max 1%) fast keinen Code behind.

    Um zu deiner frage zu kommen. Ich kann mir nicht so ganz vorstellen was du jetzt genau machen willst.
    Kannst du ein kleines Beispielprojekt machen?? Ich schau mir das gerne man an.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Bevor ich so ein Projekt beispiel bastele, kannst Du vielleicht nachsehen, warum das hier nicht geht:

    Control wird zum Teil nicht richtig dargestellt... Kann jemand helfen?

    Das geht immer noch nicht, obwohl wenn ich es ausführe, dann geht es wieder. Dort ist alles gepostet... Aber ich vermute, dass du damals noch nicht angemeldet warst. Damals habe ich alles gepostet und keine Antwort erhalten.

    EugenIS schrieb:


    Aber ich vermute, dass du damals noch nicht angemeldet warst. Damals habe ich alles gepostet und keine Antwort erhalten.


    Naja, seit gestern bin ich es ja. Bin jetzt auch nicht der Guru, ich progge nur als Hobby. Aber da ich in letzter Zeit viel mit WPF und vorallem im MVVM Pattern mache habe ich hier ein bischen Erfahrung sammeln dürfen.

    Grüße
    ​Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hat sich das erledigt??

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##