2009-03-05 9 views
0

Existe-t-il un objet ou une interface que je peux utiliser pour créer un objet de mise à jour automatique et faire en sorte que ces mises à jour se répercutent sur l'interface utilisateur dans WPF?Liaison à un objet à mise à jour automatique?

Fondamentalement, je suis à la recherche de quelque chose comme ceci:

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

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

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

Non, je ne peux pas mettre en œuvre MyClass INotifyPropertyChanged. J'ai besoin de la classe AutoUpdatingObject pour pouvoir informer WPF des changements.

+0

Pourquoi ne pas mettre en œuvre INotifyPropertyChanged? –

+0

Ugh, vous pourriez être dans un cornichon ici, mon pote. Si vous pouvez changer le XAML, essayez PriorityBinding w/une liaison à la classe MyClass et un à une classe factice qui implémente INotifyPropertyChanged et savoir quand AutoUpdatingObject est fait. n'est pas sûr que PriorityBinding choisira ces notifications. –

+0

Ce sera pour une bibliothèque, où les utilisateurs de la bibliothèque implémenteront l'objet MyClass. Je peux implémenter INotifyPropertyChanged sur AutoUpdatingObject si cela fonctionne. –

Répondre

1

L'implémentation de INotifyPropertyChanged n'est pas le seul moyen de mettre à jour des liaisons, vous pouvez également utiliser des événements sans implémenter une interface.

Using a CLR Class as the Binding Source Object

Si vous ne mettre en œuvre INotifyPropertyChanged, vous devez système organiser votre propre avis pour vous assurer que les données utilisées dans un séjour de liaison en cours. Vous pouvez fournir des notifications de modification par prenant en charge le modèle PropertyChanged pour chaque propriété pour laquelle vous souhaitez modifier les notifications . Pour prendre en charge ce modèle , vous définissez un événement PropertyNameChanged pour chaque propriété , où PropertyName est le nom de la propriété. Vous élevez l'événement chaque fois que la propriété change.

Dans votre MaClasse cas ressemblerait à ceci:

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

    public event EventHandler DataObjectChanged = delegate { }; 
}