2010-07-20 3 views
0

Je travaille dans le modèle wpf - mvvm.Peut affecter une valeur à une propriété sur un événement de modification de propriété?

J'ai une zone de texte qui contient "marketName". En xaml, je lie la propriété - "newmarketname" (qui est définie dans mon viewmodel) à cette zone de texte. Une fois que l'utilisateur a entré un nouveau nom de marché dans cette zone de texte, la méthode "set" du "newmarketname" est appelée.

Dans la méthode set du "newmarketname", j'appelle l'événement PropertyChanged.

Et le gestionnaire de modification de propriété appellera une fonction, dans laquelle je vérifie si le nom de marché est déjà existant; si "oui", je vais assigner string.Empty à la propriété "newmarketname". La méthode set de "newmarketname" est à nouveau appelée, suivie par l'événement PropertyChanged.

Mais le problème est le suivant: même si la valeur de "newmarketname" devient vide, elle ne se reflète pas dans l'interface utilisateur.

Quel est le problème?

+0

Il peut être utile si vous postez votre code –

+0

Cet événement PropertyChanged a-t-il un lien avec INotifyPropertyChanged? Si oui alors pourquoi appelez-vous la fonction à partir de là (pour vérifier les noms de marché existants), pourquoi ne pas effectuer cette vérification dans setter lui-même, puis mettre à jour la variable et appeler l'événement PropertyChanged? – akjoshi

+0

Bcoz ... pour toutes les propriétés dans ce modèle de vue ... J'appelle une méthode ... où, en fonction de la propriété, je ferai quelque chose ... – Relativity

Répondre

1

Une solution de contournement consiste à utiliser un convertisseur (même un qui renvoie simplement la valeur brute) et définir UpdateSourceTrigger à LostFocus. Une autre consiste à définir IsAsync sur True.

Cela a été corrigé dans .NET 4.0. Voir cette entrée de blog pour plus d'informations: http://karlshifflett.wordpress.com/2009/05/27/wpf-4-0-data-binding-change-great-feature/

+0

Pouvez-vous me dire comment utiliser ce convertisseur – Relativity

0

Changez-vous la variable sous-jacente au lieu de la propriété? C'est ce que je fais toujours (par erreur). WPF ignore les événements PropertyChanged qui sont déclenchés pendant qu'il définit la valeur.

+0

Non ... suis en train de changer la propriété elle-même ... et "sur la propriété a changé" événement s'appelle ... HEre ... la chose est, sur la propriété a changé l'événement d'une propriété ... ur en le changeant à nouveau ... c'est d'abord de l'interface utilisateur ... et puis du niveau de code – Relativity

0

Peut-être que vous pouvez définir votre mode de liaison à TwoWay, de cette façon, il reflète les changements de l'interface utilisateur et le code derrière

<TextBlock Text="{Binding newmarketname, Mode=TwoWay}" /> 
Questions connexes