Laden...

Items in ObservableCollection werden falsch angezeigt

Erstellt von Coooder vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.324 Views
C
Coooder Themenstarter:in
180 Beiträge seit 2011
vor 9 Jahren
Items in ObservableCollection werden falsch angezeigt

Hallo leute,

ich habe ein kleines Problem ... Ich habe zwei ObservableCollections in der sich UserControls befinden.
Es wird bei einer Aktion ein item von der einen Collection in die andere geaddet und aus der alten gelöscht.

Das Problem is das wenn ich das Item aus der einen Collection entferne, dann wird bei dieser Collection immer 2 weniger angezeigt ... ein Beispiel:

Collection A hat 5 UserControls, die alle richtig angezeigt werden.
Dann wird in Collection B ein Control aus A geadded und anschließend aus A entfernt.
Jetzt hat Collection B ein element und Collection A hat vier elemente.

In der View wird jetzt Collection B mit einem Element richtig dargestellt
Die Darstellung für Collection A ist aber fehlerhaft. Hier werden nur noch 3 elemente angezeigt obwohl Count 4 ist!


public void PlayCard()
		{
			if (PlayableCard == null)
				return;

			foreach (CardControl aCardControl in HandCards)
				if (aCardControl.Equals(PlayableCard)) {
					aCardControl.Card.State = CardState.OnField;
					FieldCards.Add(aCardControl);
					HandCards.Remove(aCardControl);
					PlayableCard = null;
					break;
				}
		}

jemand ne idee was das sein kann?

C
Coooder Themenstarter:in
180 Beiträge seit 2011
vor 9 Jahren

ich hab das Problem erstmal mit nem Workaround umgangen ... ich leere die Collection und befülle sie wieder mit den gleichen daten ... dann stimmt die anzeige

das is natürlich sehr unschön 😕

			foreach (CardControl aCardControl in HandCards)
				if (aCardControl.Equals(PlayableCard)) {
					aCardControl.Card.State = CardState.OnField;
					FieldCards.Add(aCardControl);
					HandCards.Remove(aCardControl);
					
					//------------------------------------------------- workaround
					Cards temp = new Cards();

					foreach (CardControl control in HandCards) {
						temp.Add(new CardControl(control.Card));
					}

					HandCards.Clear();

					foreach (CardControl item in temp) {
						item.OnPlayable += (sender, e) => { PlayableCard = (CardControl) sender; };
						HandCards.Add(item);
					}
					//-------------------------------------------------
					PlayableCard = null;
					break;
				}

vieleicht kommt ja jetzt jemand drauf ... ich steh nämlich ganz schön aufm Schlauch was das angeht

PS: die Klasse Cards erbt von ObservableCollection

5.658 Beiträge seit 2006
vor 9 Jahren

Hi Coooder,

man kann nur immer wiederholen, daß man in WPF keine Steuerelemente im Code erzeugt. In eine ObservableCollection gehören die ViewModels, die du in der View an deine Steuerelemente bindest.

Christian

Weeks of programming can save you hours of planning

C
Coooder Themenstarter:in
180 Beiträge seit 2011
vor 9 Jahren

Okay dann versteh ich aber nich warum ^^

Also ich hab das ItemsSource Property von einem ItemsControl an die Collection gebunden.
Wenn in der Collection nun aber nich die Controls drin sind, sonder nur die VM´s ... wie wird das dann angezeigt?

A
350 Beiträge seit 2010
vor 9 Jahren

Okay dann versteh ich aber nich warum ^^

Also ich hab das ItemsSource Property von einem ItemsControl an die Collection gebunden.
Wenn in der Collection nun aber nich die Controls drin sind, sonder nur die VM´s ... wie wird das dann angezeigt?

Du sagst deinem XAML wie ein VM dargestellt wird.

http://www.codeproject.com/Articles/819294/WPF-MVVM-step-by-step-Basics-to-Advance-Level

EDIT: Der hier is besser https://msdn.microsoft.com/en-us/library/gg430857%28v=pandp.40%29.aspx