8
votes

Reliure à une 2e propriétés si le 1er est "non défini"

Je ne copierai pas / coller tout mon fichier XAML. Il sera trop long pour l'expliquer mais voici ce qui est intéressant: j'ai eu une liaison d'une propriété "nom" xxx

la chose est que parfois, mon article n'a pas " Nom "Propriété. Ça ne s'écrase pas mais j'ai simplement eu un texte vide dans ma textblock

ce que je voudrais faire, si le nom est vide, doit être contraigné à "rien", juste {Binding}. Cela affichera mon nom d'objet et il sera parfait!

Merci d'avance pour toute aide et désolé s'il s'agit d'une question noobie: (


0 commentaires

4 Réponses :


0
votes

Si vous ne devez pas vous attacher au nom du type d'objet, vous pouvez utiliser TargeNullValue qui vous donnera une valeur par défaut si la propriété liée est NULL, comme ceci:

<TextBlock Text="{Binding Name, TargetNullValue=Default}" />


4 commentaires

Avec votre code, j'ai toujours des blocs de texte vide lorsque mes objets n'ont pas de propriété de nom. Je ne sais pas si c'est prévu ou non. À propos du convertisseur, je ne sais pas vraiment, cela me semble surprenant que nous ne le faisons pas simplement dans le fichier XAML!


La liaison de la propriété échouera dans cette situation afin que TargeNullValue ne sera jamais utilisé. Vous ne pouvez pas avoir une valeur nulle pour la cible si vous avez échoué à la cible.


Désolé, je n'ai pas compris que la propriété manquait, je pensais juste que c'était Null ("si le nom est vide"). Ma faute.


FYI, il y a une propriété FallbackValue sur la liaison pour les cas lorsque la liaison elle-même échoue, mais permettant uniquement de revenir à une valeur constante.



0
votes

Ceci est théorique mais ...

Je créerais un style personnalisé et cible tous vos blocs de texte. Dans votre style, vous pouvez définir une valeur de texte par défaut. Si votre liaison ne remplace pas le style, votre valeur par défaut sera utilisée. P>

Style x:Key="TwitterTextBoxStyle" TargetType="{x:Type TextBox}">
    <Setter Property="Text" Value="" />


1 commentaires

Je veux que la valeur par défaut soit une autre liaison, pas une valeur statique :(



3
votes

Vous pouvez appliquer un style avec un Datatrigger : xxx


4 commentaires

Semble travailler mais je dois savoir quelque chose pour être sûr, quand je viens d'utiliser {Binding}. À quelle propriété le champ est lié?


@Guillaume, {reliure} signifie utiliser la valeur de l'actuel DataContext comme valeur à attribuer à la propriété. En d'autres termes, un chemin vide signifie simplement utiliser l'instance d'objet elle-même plutôt que l'une de ses propriétés. Voici une feuille de triche pratique pour la syntaxe de liaison: nbdtech.com/free/wpfbinding.pdfle/a >


@Guillaumecogranne {Binding} se liera à ce que votre contexte de données actuel soit défini sur. Donc, au lieu de se lier à la propriété Nom d'une classe, vous liez la classe contenant la propriété Nom.


Voici ma prochaine et dernière question: Stackoverflow.com/questions / 8244658 / ...