PP_beTheToolSmith
Würden Sie gerne auf diese Nachricht reagieren? Erstellen Sie einen Account in wenigen Klicks oder loggen Sie sich ein, um fortzufahren.

ausgewählte Charaktere Dialog

3 verfasser

Nach unten

ausgewählte Charaktere Dialog Empty ausgewählte Charaktere Dialog

Beitrag von Tobias G. Do Jan 10, 2013 5:54 am

hallo zusammen.
wo werden denn eigentlich die zugehörigen charaktere des dialogs gespeichert? müssen wissen, woran wir die combobox im textfenster binden.
bisher kein plan.

Tobias G.

Anzahl der Beiträge : 37
Anmeldedatum : 23.10.12

Nach oben Nach unten

ausgewählte Charaktere Dialog Empty Re: ausgewählte Charaktere Dialog

Beitrag von ahertel Do Jan 10, 2013 7:33 am

Jeder geöffnete Dialog wird ja in einer TextEditorVM geladen, diese enthält eine ObservableCollection "invCharacters" , die alle zum Dialog gehörenden Charaktere vom Typ T_Character enthält.

Die TextLineVM die ja für jede Textline da sind haben eine Property "speaker", die das jeweils ausgewählte Objekt enthalten soll (soviel zur Theorie). Ich bin noch nich ganz sicher wie wir das am geschicktesten binden, da eine combobox möglicherweise so wie eine Listbox nur einen SelectedIndex enthält. Könnte aber trotzdem irgendwie klappen tatsächlich das ausgewählte Element zu binden, aber falls es da scheitert sagt bescheid, dann denken wir uns etwas aus.

ahertel

Anzahl der Beiträge : 507
Anmeldedatum : 25.10.12

Nach oben Nach unten

ausgewählte Charaktere Dialog Empty Re: ausgewählte Charaktere Dialog

Beitrag von Tobias Stein Mi Jan 16, 2013 4:49 am

Habe jetzt mehrer Möglichkeiten ausprobiert die ComboBox an die Charaktere zu binden. Bisher ohne Erfolg.

1.
Code:
<ComboBox ItemsSource="{Binding Speaker}"/>

da wir uns durch die ListBox im DataContext der TextLineVM befinden brauch es hier keine weitere Pfadangabe


2.
Code:
<ComboBox ItemsSource="{Binding DataContext.InvCharacter, RelativeSource={RelativeSource AncestorType={x:Type TabItem}}}
SelectedItem={Binding name}"/>

Das wiederrum referenziert das TextEditorVM Objekt das in der nächsthöheren TabControl definiert wird. Dort liegt die Liste mit den teilnehmenden Charakteren.


Wenn noch jemand ne Idee hat ich jetzt grade nicht.

Tobias Stein

Anzahl der Beiträge : 88
Anmeldedatum : 23.10.12

Nach oben Nach unten

ausgewählte Charaktere Dialog Empty Re: ausgewählte Charaktere Dialog

Beitrag von ahertel Mi Jan 16, 2013 9:14 am

Bin gradnoch nicht zuhause, schaue später nochmalnach ich meine aber dass invcharacters vom typ CharacterVM ist, dh binding Name (groß geschrieben). Binding speaker klappt nich weil speaker genau das ausgewählte element enthalten soll, nicht die liste. Ich denke dass wir dafür n icommand binden müssen der dann ne funktion zum speichern aufruft oder wir kriegen ne andere variable hin die den index des ausgewählten charakters aus der invcharacters liste enthält, falls sich das binden lässt. Dann würden wir speaker intern manuell füllen können.
Alle angaben ohne gewähr ich versuch da heute abend noch mehr infos zu kriegen...

ahertel

Anzahl der Beiträge : 507
Anmeldedatum : 25.10.12

Nach oben Nach unten

ausgewählte Charaktere Dialog Empty Re: ausgewählte Charaktere Dialog

Beitrag von ahertel Mi Jan 16, 2013 9:52 am

OK jetz zuhause mit projekt vor der Nase.

invCharacters is vom Typ T_Character (zumindest zum jetzigen zeitpunkt). das heißt das Binding sollte korrekterweise auf name gehen. Allerdings klappt das nicht so wie in deinem 2. code, weil du das SelectedItem auf den namen bindest. (ansonsten sieht das aber nach nem brauchbaren ansatz aus).

Ich hab soeben eine neue Property zur TextLineVM eingefügt (als provisorium zum testen). Diese heißt "SpeakerIndex" und ist ein integer. Ich gehe stark davon aus, dass ihr DAS jetzt an SelectedItem binden könnt, und somit die Auswahl in der Combobox an die VM geleitet werden kann (wir werden uns dann fürs backend überlegen wie wir weiter damit hantieren, denn wenn man die Charakterliste bearbeitet, könnten da inkonsistenten entstehen.)

In diesem Zuge eine Frage die auch die Konzeptgruppe interessieren dürfte (bevor es später erst als bug auftaucht):
Was ist die Charakterauswahl, wenn eine Zeile einem Charakter zugehörig ist, der anschließend aus der liste der beteiligten Charaktere gelöscht wird? (immer der erste charakter, brauchen wir eine "Bitte Charakter Wählen"-Zeile in der involvedListe, etc etc)

Was das grundlegende Binding an die invCharacters Liste angeht, so braucht ihr ein Datatemplate, das jede einzelne Zeile der Combobox definiert (ist im mainwindow bereits mehrfach vorhanden glaube ich, sollte also simpel sein). Dieses Datatemplate definiert dann wie die Elemente der Combobox (die ja vom Typ T_Character sind) angezeigt werden, und sollten dann n Textlabel enthalten das an name gebunden ist. so ca.

Hoffe das hilft. Weitere fragen immer her Smile

ahertel

Anzahl der Beiträge : 507
Anmeldedatum : 25.10.12

Nach oben Nach unten

ausgewählte Charaktere Dialog Empty Re: ausgewählte Charaktere Dialog

Beitrag von Tobias Stein Mi Jan 16, 2013 11:56 pm

Nee das geht auch nicht, glaube aber das die Ursache woanders liegt da ich theoretisch auch nur innerhalb der TextEditor bleiben kann, da liegen ein paar dummy charactere.Aber auch da tut sich nix

Tobias Stein

Anzahl der Beiträge : 88
Anmeldedatum : 23.10.12

Nach oben Nach unten

ausgewählte Charaktere Dialog Empty Re: ausgewählte Charaktere Dialog

Beitrag von ahertel Do Jan 17, 2013 1:22 am

wenn du innerhalb des texteditors bist, sollte alles klar gehn weil dann invcharacters die charaktere des dialogs enthält (sollte sogar funktional sein daher bräuchten wir keine dummy chars)...

Das SelectedItem hingegen müsste dann wieder innerhalb der textline liegen.

Eine Notlösung wäre jeder TextlineVM die invcharactersliste zu geben ich glaube aber ehrlich gesagt nicht dass das notwendig ist.

was habt ihr denn akkut ausprobiert? poste mal code zum drüberschauen...

ahertel

Anzahl der Beiträge : 507
Anmeldedatum : 25.10.12

Nach oben Nach unten

ausgewählte Charaktere Dialog Empty Re: ausgewählte Charaktere Dialog

Beitrag von ahertel Do Jan 17, 2013 5:10 am

http://social.msdn.microsoft.com/Forums/de-DE/wpfde/thread/8fc451d2-6bca-4229-ac37-94299ac65247

hab hier was gefunden das könnte hilfreich sein, wie man das bindet... nach dem schema wäre das "Name" dann auch unser T_Character.name, und statt einer numeric value die wir binden müssen, könnten wir versuchen das ganze t_character objekt an speaker zu binden, oder notfalls nehmen wir die character ID...

ahertel

Anzahl der Beiträge : 507
Anmeldedatum : 25.10.12

Nach oben Nach unten

ausgewählte Charaktere Dialog Empty Re: ausgewählte Charaktere Dialog

Beitrag von ahertel Sa Jan 19, 2013 4:32 am

AAAALSO

die Gute Nachricht:
http://www.codeproject.com/Articles/301678/Step-by-Step-WPF-Data-Binding-with-Comboboxes

Code:
<ComboBox ItemsSource="{Binding ColorListEnum}"
            DisplayMemberPath="ValueColorString"
            SelectedValuePath="ValueColorEnum"
            SelectedValue="{Binding ViewModelEnum.ColorEnum}" />

So wies aussieht haben wir selectedValuePath und SelectedValue womit wir das gewählte Element auswählen können.

Ich hab grad ma n bissl rumexperimentiert, es scheint dass euer RelativeSource im Binding nicht so funktioniert. Es scheint mir dass ihr so nur auf Elemente der TabControl, nicht aber auf die TextEditorVM kommt.

Ich muss leider jetz weg aber guck heut nacht nochma rein, das muss ja irgendwie möglich sein...

ahertel

Anzahl der Beiträge : 507
Anmeldedatum : 25.10.12

Nach oben Nach unten

ausgewählte Charaktere Dialog Empty Re: ausgewählte Charaktere Dialog

Beitrag von Tobias Stein Sa Jan 19, 2013 4:37 am

Die TabControl hat ja Die TextEditorVM gebunden durch
Code:
 ItemsSource ="{Binding TextEditors}"
oder sehe ich das falsch?

Tobias Stein

Anzahl der Beiträge : 88
Anmeldedatum : 23.10.12

Nach oben Nach unten

ausgewählte Charaktere Dialog Empty Re: ausgewählte Charaktere Dialog

Beitrag von Tobias Stein Sa Jan 19, 2013 5:01 am

Code:
 <ComboBox Grid.Column="0" Grid.Row="1" Width="70"
                ItemsSource="{Binding DataContext.InvCharacter, RelativeSource={RelativeSource AncestorType={x:Type TabItem}}}"
                DisplayMemberPath="name"
                SelectedValuePath="cid"
                SelectedValue="{Binding cid}">
</ComboBox>

ok das habe ich jetzt probiert, allerdings glaube ich nicht das selectedValue einfach so auf die T_Character class zeigt

Ich habe das problem auch mal bei staticoverflow gepostet, mal gucken ob da jemand ne idee hat


Tobias Stein

Anzahl der Beiträge : 88
Anmeldedatum : 23.10.12

Nach oben Nach unten

ausgewählte Charaktere Dialog Empty Re: ausgewählte Charaktere Dialog

Beitrag von ahertel Sa Jan 19, 2013 8:04 am

klappt das jetz dass die Charaktere in der Liste autauchen?
ansonsten is selectedvaluepath nicht die cid, sondern der charakter selber (ich vermute SelectedValuePath="this"?? auf jeden fall mit selbstreferenz)
dann wäre SelectedValue="{Binding speaker}"

so würden wir den tatsächlichen Charakter aus der Liste weitergeben...

ahertel

Anzahl der Beiträge : 507
Anmeldedatum : 25.10.12

Nach oben Nach unten

ausgewählte Charaktere Dialog Empty Re: ausgewählte Charaktere Dialog

Beitrag von ahertel Sa Jan 19, 2013 10:40 am

okay ich bin der Lösung des Rätsels etwas näher:

Ich habe mal getestet wie ich ZB an ein Textfeld innerhalb eines Listbox items (im datatemplate) den titel des dialogs binden könnte und folgendes gemacht:

Code:
<TextBlock Grid.Column="0" Text="{Binding Path=DataContext.Title, RelativeSource={RelativeSource AncestorType={x:Type ListBox}}}" HorizontalAlignment="Center"/>

Ich hab testweise dafür einfach das label genommen, das normalerweise den string "From:" enthält und siehe da: es klappt.

Was ich dadurch herausgefunden habe: Wir müssen als parent nicht TabControl oder TabItem binden sondern die ListBox. Offensichtlich hat also die ListBox als DataContext die TextEditorVM.

Als ich mal spaßeshalber den Title an die Combobox gebunden habe waren auf einmal seeehr viele items in der combobox, also wurden offenbar die einzelnen Buchstaben aufgelistet (nur nicht angezeigt)...

Problem: wenn ich jetzt im selben DataContext die InvCharacters liste binde, tauchen die charaktere immernoch nich auf. Ich werd jetz mal gucken ob vllt im code fehler sind, sodass die Liste tatsächlich leer ist... ansonsten isses aber schonmal ein schritt in die richtige Richtung.

Ideen immer her!


EDIT: ok aus irgendeinem grund funzts plötzlich (sofern unsere Dummycharaktere Peter Pan, Captain Hook und Das Krokodil sind Razz)

werd jetz ma gucken dass die dummies wieder verschwinden und danach den krempel einchecken, wenn die echten charaktere funktionieren.

Edit2: Charaktere und Auflistung funktionieren jetzt. Ein Problem war dass beim ersteleln der TextEditorVM die Charakterliste des Dialogs nicht korrekt übernommen wurde. ich checke jetzt ein.

Nächstes Todo: Binden des ausgewählten Charakters aus der Combolist.

ahertel

Anzahl der Beiträge : 507
Anmeldedatum : 25.10.12

Nach oben Nach unten

ausgewählte Charaktere Dialog Empty Re: ausgewählte Charaktere Dialog

Beitrag von Tobias Stein So Jan 20, 2013 3:00 am

ja krass. wobei mir aber das verständniss fehlt warum der datacontext die listbox sein soll, die listbox bindet doch an die TextLinesVM (ItemsSource="{Binding TextLines}") und dort liegen die InvCharacters nicht.
wie auch immer good job!

Nächstes Todo: Binden des ausgewählten Charakters aus der Combolist.

kannst du das konkretisieren? was genau soll wo gebunden werden?

Tobias Stein

Anzahl der Beiträge : 88
Anmeldedatum : 23.10.12

Nach oben Nach unten

ausgewählte Charaktere Dialog Empty Re: ausgewählte Charaktere Dialog

Beitrag von ahertel So Jan 20, 2013 4:03 am

Da genau liegt der kleine denkfehler... der DataContext ist die TextEditorVM. Die ItemSource der Listbox bindet an TextLines (enthalten in der TextEditorVM). War mir so auch nich bewusst aber als ich in nem beispiel im internet quasi die gleiche situation gesehen hab wars plötzlich klar.

Was noch gebunden werden muss geht vermutlich mit SelectedValue und SelectedValuePath, da wollt ich nachher noch rumexperimentieren. Im Grunde muss das Ausgewählte Element der Combobox an speaker gebunden werden, somit wird gespeichert was ausgewählt ist, und beim öffnen des dialogs wird die selektion korrekt wiederhergestellt (ich hoffe zumindest dass wpf das so einfach handled wie es aussieht)

ahertel

Anzahl der Beiträge : 507
Anmeldedatum : 25.10.12

Nach oben Nach unten

ausgewählte Charaktere Dialog Empty Re: ausgewählte Charaktere Dialog

Beitrag von ahertel So Jan 20, 2013 5:54 am

Kniet nieder!!! ich habs geschafft Smile

Code:
<ComboBox Grid.Column="0" Grid.Row="1" Width="70"
 ItemsSource="{Binding Path=DataContext.InvCharacters, RelativeSource={RelativeSource AncestorType={x:Type ListBox}}}"
 DisplayMemberPath="name"
 SelectedValuePath="cid"
 SelectedValue="{Binding Speaker.cid, Mode=OneWay}"
 SelectedItem="{Binding Speaker}"
 />

Erklärung:
Itemsource: Wie gehabt Datacontext der Listbox=TexteditorVM -> Binding DataContext.InvCharacters
DisplayMemberPath: Hat per se dann den datacontext EINES items, also im moment T_Character. "name" zeigt auf den namen und dieser wird angezeigt (daher: DisplayMember)

Jetz der interessante teil:
SelectedItem: Bindet an Speaker, ist glaube ich per se oneway, dh bei auswahl haben wir den speaker gesetzt

SelectedValuePath: zeigt auf die cid (die von T_Character) und definiert, nach welchem Wert sich die selected Value (nicht die displayed) orientiert. Bspw. können so mehrere Charaktere denselben namen haben (theoretisch), aber da sie über die cid ausgewählt werden gibt es keine verwechslungen.

[b]SelectedValue[/]: Bindet an die cid des speakers, einmalig. ich vermute hier einen rein lesenden zugriff, bin nicht 100% sicher, daher hab ich den mode auf OneWaygestellt, damit das nich schiefgeht und in den charakter schreibt... An sich wird hier aber die cid des charakters gelesen, und anhand dieser (wg. dem selectedvaluepath="cid") die selektion fest gebunden.

Ich hab nen mini-testdialog in ne dateigespeichert zum testen. muss jetz noch ein paar minifixes in der textlinevm vornehmen und check den kram gleich ein.

ahertel

Anzahl der Beiträge : 507
Anmeldedatum : 25.10.12

Nach oben Nach unten

ausgewählte Charaktere Dialog Empty Re: ausgewählte Charaktere Dialog

Beitrag von ahertel So Jan 20, 2013 6:14 am

okidoke is alles drin

charaktere können jetzt ausgewählt werden und beim öffnen eines bestehenden dialogs werden die korrekt angezeigt.

Außerdem hab ich noch n paar fixes gemacht was die anzeige der froms udn tos angeht

Zudem hab ich noch dafür gesorgt dass bei "Add Option" der speaker auf den selben sprecher gesetzt wird, wie bei der ur-option. (im normalfall ist eine option ja eine option für den selben sprecher...)

Was in der UI noch fehlt (is mir grad aufgefallen) is die Anzeige der ID der Zeile, ich vermute aber dass die funktioniert, angesichts der beobachtungen beim "Add Answer" testen...

ahertel

Anzahl der Beiträge : 507
Anmeldedatum : 25.10.12

Nach oben Nach unten

ausgewählte Charaktere Dialog Empty Re: ausgewählte Charaktere Dialog

Beitrag von ahertel So Jan 20, 2013 6:27 am

ausgewählte Charaktere Dialog Button10

Was ihr hier seht ist mein erster Ansatz für das "Buttons ausblenden, wenn die Zeile nicht ausgewählt ist". Könnt im quelltext nachlesen wie das geht, ist ein einfacher trigger auf das IsSelected attribut der ListboxItems, mit nem Setter für die Visibility properties der buttons...

Jetzt an die Layouter: (sofern ihr wünscht dieses Feature zu perfektionieren und überhaupt zu übernehmen)
Wie ihr seht sind die Zeilen immernoch hoch. Das liegt daran, dass da immernoch die Combobox in der Zweiten Zeile ist. Wenn ihr das hinkriegt die in die Erste Zeile zu packen, werden die Zeilen die nciht ausgewählt werden flacher (und meiner meinung nach besser lesbar).

Zudem könnte man noch überlegen die Combobox auch noch verschwinden zu lassen und stattdessen ein Label mit dem Namen anzuzeigen (selbiges ginge sogar für die Textzeile, falls erwünscht)... Dann wären alle interaktiven Elemente nur noch für die Zeile in der man ist verfügbar.


ahertel

Anzahl der Beiträge : 507
Anmeldedatum : 25.10.12

Nach oben Nach unten

ausgewählte Charaktere Dialog Empty Re: ausgewählte Charaktere Dialog

Beitrag von Tobias G. Mo Jan 21, 2013 2:13 am

arne, du bist ein held. king

Tobias G.

Anzahl der Beiträge : 37
Anmeldedatum : 23.10.12

Nach oben Nach unten

ausgewählte Charaktere Dialog Empty Re: ausgewählte Charaktere Dialog

Beitrag von ahertel Mo Jan 21, 2013 3:48 am

krieg ich n cape? Razz und am dienstag stellt ihr mich dann in heldenpose neben einen ventilator Razz

ahertel

Anzahl der Beiträge : 507
Anmeldedatum : 25.10.12

Nach oben Nach unten

ausgewählte Charaktere Dialog Empty Re: ausgewählte Charaktere Dialog

Beitrag von Gesponserte Inhalte


Gesponserte Inhalte


Nach oben Nach unten

Nach oben

- Ähnliche Themen

 
Befugnisse in diesem Forum
Sie können in diesem Forum nicht antworten