Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Windows RT App DataBinding einer ObservableCollection (DefaultViewModel)
Console32
myCSharp.de - Member



Dabei seit:
Beiträge: 258

Themenstarter:

Windows RT App DataBinding einer ObservableCollection (DefaultViewModel)

beantworten | zitieren | melden

Hallo Community,

Ich habe ein UserControl welches eine ObservableCollection<MyPoint> als Property definiert.

Nun bieten die Windows 8 Store templates ein DefaultViewModel vom Typ ObservableMap<strting,Object>.

Diesem DefaultViewModel füge ich ebenfalls eine ObservableCollection<MyPoint> hinzu:

this.DefaultViewModel["Values"] = new ObservableCollection<CurvePoint>();


Im Xaml erstelle ich dann das Binding.
            <userControls:Curve x:Name="Curve"  Grid.Column="0"  Values="{Binding Values, Mode=TwoWay}"/>

das DefaultViewModel["Values"] ist ebenfalls an einen ListView gebunden:
Füge ich dem DefaultViewModel["Values"] nun werte hinzu werden die änderungen im ListView angezeigt in meinem UserControll kommen diese jedoch nicht an (Die Collection ist weiterhin Leer) wieso werden die Änderungen nicht an mein UserControl weitergegebn
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Console32 am .
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5.649
Herkunft: Leipzig

beantworten | zitieren | melden

Hi Console32,

was ist das für ein UserControl? Hast du das selbst geschrieben? Ist UserControl.Values ein DependencyProperty? Welche DataBinding-Fehler werden im Ausgabefenster angezeigt? Bist du dir sicher, daß du ein TwoWay-Binding benötigst (bzw. tauscht dein UserControl die Auflistung aus)? Hast du schonmal versucht, das Problem mit dem DebugConverter einzugrenzen?

Christian
Weeks of programming can save you hours of planning
private Nachricht | Beiträge des Benutzers
Console32
myCSharp.de - Member



Dabei seit:
Beiträge: 258

Themenstarter:

beantworten | zitieren | melden

Hallo MrSparkle

Ja es ist ein eigenes UserControl, Values ist eine DependencyProperty im Output stehen im Moment keine Fehler. Montag kann ich das ganze nochmal mit Tracing versuchen.

Das TwoWay wird benötigt ändert aber nichts an meinem Problem.
DebugConverter seh ich mir ebenfalls am Montag an.
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5.649
Herkunft: Leipzig

beantworten | zitieren | melden

Was machst du denn innerhalb des UserControls mit der Auflistung? Bindest du sie dort auch wieder an ein Items-Property eines ItemsControls? In dem Fall sollte sich das ItemsControl um das Updaten der Collection kümmern. In allen anderen Fällen mußt du selbst für eine Neudarstellung sorgen. Dazu müßtest du auf die Ereignisse der INotifyCollectionChanged-Schnittstelle reagieren.

Christian
Weeks of programming can save you hours of planning
private Nachricht | Beiträge des Benutzers
Console32
myCSharp.de - Member



Dabei seit:
Beiträge: 258

Themenstarter:

beantworten | zitieren | melden

Was innerhalb passiert ist erstmal egal da die collection leer bleibt.

Es geht mir im moment nur darum das die ObservableCollection meines UserControls keine änderungen an dem ViewModel mitbekommt
private Nachricht | Beiträge des Benutzers
Console32
myCSharp.de - Member



Dabei seit:
Beiträge: 258

Themenstarter:

beantworten | zitieren | melden

Okay ich habe das "Problem" jetzt gefunden, entferne ich den DataContext aus dem UserControll funktioniert es.

Nun tritt ein seltsames Problem auf:
Obwohl sich die Collection meines UserControlls ändert wird der EventHandler nicht ausgelöst. Obwohl die CollectionChanged handler nicht null ist.

UserControl:

public static readonly DependencyProperty ValuesProperty =
            DependencyProperty.Register("Values", typeof(ObservableCollection<CurvePoint>), typeof(CurveTest), new PropertyMetadata(new ObservableCollection<CurvePoint>()));

        public ObservableCollection<CurvePoint> Values
        {
            get { return (ObservableCollection<CurvePoint>)GetValue(ValuesProperty); }
            set 
            {
                 value.CollectionChanged += Values_CollectionChanged;
                 SetValue(ValuesProperty, value); 
            }
        }

        public CurveTest()
        {
            
            this.InitializeComponent();
            this.Values.CollectionChanged += Values_CollectionChanged;
        }

        void Values_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
        {
        }

Im ClickHandler:

            ((ObservableCollection<CurvePoint>)this.DefaultViewModel["Values"]).Add(new CurvePoint());

Woran kann das liegen?
private Nachricht | Beiträge des Benutzers
Console32
myCSharp.de - Member



Dabei seit:
Beiträge: 258

Themenstarter:

beantworten | zitieren | melden

Okay ich habe es nun gefunden.
Mir war nicht klar das das DataBinding die Werte über die DP zuweißt und nicht über die Property deswegen wurde mein Handler immer verworfen.

Mit einen PropertyChanged Handler in der Metadata Funktioniert es.
private Nachricht | Beiträge des Benutzers