Laden...

Windows RT App DataBinding einer ObservableCollection (DefaultViewModel)

Erstellt von Console32 vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.572 Views
C
Console32 Themenstarter:in
258 Beiträge seit 2011
vor 10 Jahren
Windows RT App DataBinding einer ObservableCollection (DefaultViewModel)

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

5.657 Beiträge seit 2006
vor 10 Jahren

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

C
Console32 Themenstarter:in
258 Beiträge seit 2011
vor 10 Jahren

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.

5.657 Beiträge seit 2006
vor 10 Jahren

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

C
Console32 Themenstarter:in
258 Beiträge seit 2011
vor 10 Jahren

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

C
Console32 Themenstarter:in
258 Beiträge seit 2011
vor 10 Jahren

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?

C
Console32 Themenstarter:in
258 Beiträge seit 2011
vor 10 Jahren

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.