2013-04-03 4 views
0

Je fenêtre WPF Titre-propriété binded à la propriété ViewModel ReadOnly comme:WPF comment mettre à jour la vue binded à la propriété ReadOnly dans ViewModel

Title="{Binding ClientAndDate}" 

propriété ViewModel ressemble à ceci:

Public ReadOnly Property ClientAndDate As String 
    Get 
     Return SelectedClient.Name) & " " & SelectedClient.Date) 
    End Get 
End Property 

I avez INotifyPropertyChanged implémenté dans ViewModel mais puisqu'il s'agit de la propriété ReadOnly comment il notifiera l'interface utilisateur à mettre à jour lorsque SelectedClient.Name ou SelectedClient.Date est modifié?

+0

Je ne pense pas que readonly aura un effet sur le comportement 'INotifyPropertyChanged'? Êtes-vous confronté à un problème? –

+0

Oui mais il doit informer l'interface utilisateur sur le changement. c'est-à-dire qu'il doit appeler un événement de changement. – WELLCZECH

Répondre

2

Si vous êtes abonné à l'événement PropertyChanged de SelectedClient, vous pourriez alors soulever l'événement de changement de propriété dans le viewmodel sur la propriété ClientAndDate chaque fois Name ou Date sont la cause du changement de propriété de SelectedClient.

Même si la propriété ClientAndDate est en lecture seule, le fait de déclencher une notification de modification de propriété à l'endroit de votre modèle entraîne l'actualisation du sous-système de liaison de la propriété.

+0

Oui, c'est ce que j'utilisais déjà. Je pensais juste que ce n'est pas la meilleure pratique car cela peut devenir un code assez compliqué à gérer quand il y a beaucoup de ces propriétés en lecture seule. J'ai aussi étudié cela ailleurs et il semble qu'il n'y ait vraiment pas de solutions totalement élégantes à cela. – Nuts

-1

Vous devez effectuer une méthode "notify".

Comme celui-ci.

protected void OnPropertyChanged(string name) 
{ 
    PropertyChangedEventHandler handler = PropertyChanged; 
    if (handler != null) 
    { 
     handler(this, new PropertyChangedEventArgs(name)); 
    } 
} 

et l'appeler avec l'argument "de ClientAndDate" chaque Tyme vous avez besoin de mettre à jour l'interface utilisateur. "ClientAndDate" est le nom de la propriété qui a été mise à jour.

Here est un exemple complet avec l'instruction GET, mais vous pouvez l'utiliser de la même manière.

+0

«Je ne comprends pas. Comment cette méthode devrait-elle être utile, si elle est implémentée dans une classe de vue? – DHN

+0

Alors votre première phrase est trompeuse * Vous devez faire une méthode "notify" dans votre classe de page/fenêtre. * Je n'ai pas suivi votre lien. – DHN

+0

Non. Cette méthode est-elle un événement propertyChanged appelé. 'handler (this, new PropertyChangedEventArgs (name));' – WELLCZECH

Questions connexes