2009-03-05 21 views
0

Gibt es ein Objekt oder eine Schnittstelle, die ich verwenden kann, um ein automatisch aktualisierendes Objekt zu erstellen, und diese Aktualisierungen über die Benutzeroberfläche in WPF zu filtern?An ein automatisch aktualisierendes Objekt binden?

Grundsätzlich suche ich nach etwas wie folgt aus:

<TextBlock Text="{Binding Source={StaticResource myClass}, Path=DataObject}" /> 

public class MyClass 
{ 
    public AutoUpdatingObject DataObject { get; set; } 
} 

public class AutoUpdatingObject: ??? 
{ 
    ??? 
} 

Nein ich nicht MyClass INotifyPropertyChanged implementieren machen. Ich brauche die AutoUpdatingObject-Klasse, um WPF über Änderungen zu informieren.

+0

Warum kann man nicht INotifyPropertyChanged implementieren? –

+0

Ugh, du könntest hier in einer Essiggurke sein, Kumpel. Wenn Sie die XAML ändern können, versuchen Sie PriorityBinding mit einer Bindung an die MyClass und eine Dummy-Klasse, die INotifyPropertyChanged implementiert und wissen, wann AutoUpdatingObject fertig ist. nicht sicher, dass PriorityBinding diese Benachrichtigungen auswählen wird. –

+0

Dies ist für eine Bibliothek, in der die Benutzer der Bibliothek das MyClass-Objekt implementieren werden. Ich kann INotifyPropertyChanged auf AutoUpdatingObject implementieren, wenn das funktioniert. –

Antwort

1

Die Implementierung von INotifyPropertyChanged ist nicht die einzige Möglichkeit, Bindungen zu aktualisieren. Sie können Ereignisse auch ohne Implementierung einer Schnittstelle verwenden.

Using a CLR Class as the Binding Source Object

Wenn Sie INotifyPropertyChanged nicht implementieren, müssen Sie für Ihre eigene Mitteilung System anordnen, um sicherzustellen, dass der Datenstrom in einem Bindungs ​​Aufenthalt verwendet. Sie können Änderungsbenachrichtigungen von bereitstellen, die das PropertyChanged-Muster für jede Eigenschaft unterstützen, die Sie für Benachrichtigungen ändern möchten. Um dieses Muster zu unterstützen, definieren Sie ein PropertyNameChanged-Ereignis für jede -Eigenschaft, wobei PropertyName der -Name der Eigenschaft ist. Sie erhöhen das Ereignis jedes Mal, wenn sich die Eigenschaft ändert.

In Ihrem Fall MyClass würde wie folgt aussehen:

public class MyClass 
{ 
    private AutoUpdatingObject dataObject; 
    public AutoUpdatingObject DataObject 
    { 
     get { return dataObject; } 
     set { dataObject = value; DataObjectChanged(this, new EventArgs()); } 
    } 

    public event EventHandler DataObjectChanged = delegate { }; 
} 
Verwandte Themen