WPF: Lier DisplayMemberPath dans une zone de liste déroulante à l'Élément
Ok, c'est bizarre, mais c'est en gros ce que je dois faire. J'ai un contrôle WPF qui est lié à un objet Document. Le Document objet a une propriété Pages. Donc, à mon ViewModel, j'ai un CurrentDocument de la propriété, et un CurrentPage de la propriété.
Maintenant, j'ai une zone de liste déroulante que j'ai lié à la CurrentDocument.Les Pages de propriété et les mises à jour de la CurrentPage propriété.
<ComboBox ItemsSource="{Binding CurrentDocument.Pages}"
DisplayMemberPath="???"
SelectedItem="{Binding CurrentPage, Mode=TwoWay}">
</ComboBox>
Avec moi jusqu'à présent? Tout cela est très bien sauf que j'ai besoin de la DisplayMemberPath de montrer la "Page 1", "Page 2", etc.....
J'ai essayé de créer un convertisseur tel que ceci:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string pageNumber = "Page {0}";
return string.Format(pageNumber, value);
}
Et a essayé de lier DisplayMemberPath comme cela:
DisplayMemberPath="{Binding RelativeSource={RelativeSource Self}, Path=Index, Converter={StaticResource pgTitleConv}}"
Mais il ne s'affiche pas dans la liste déroulante zone de texte!!!
Il n'y a pas de "Index" de la propriété, mais je ne sais pas comment faire...Comment puis-je accéder à l'index de l'élément de la zone de liste déroulante est contraignant...??????
OriginalL'auteur Jeffrey T. Whitney | 2009-07-27
Vous devez vous connecter pour publier un commentaire.
essayez ceci:
et dans votre valueconverter, si vous pouvez accéder à la collection de pages, vous pouvez utiliser CurrentDocument.Des Pages.IndexOf(valeur) pour obtenir l'index de l'objet lié. Je suis sûr qu'il ya une meilleure façon.
+1 le Grand truc !
Fonctionne, mais à l'aide d'un convertisseur impacts de la performance. J'ai adapté ci-dessous pour utiliser la liaison StringFormat fonctionnalité. par exemple. <TextBlock Text="{Binding StringFormat={}{0:\: #0}}" />
Juste par curiosité, combien de différence de performances est-il? Comment avez-vous mesurer? Et où est la page d'index dans la chaîne de format?
Son exemple montre qu'il est le formatage d'un int valeur (numéro de page/index) "de la chaîne.Format(pageNumber, valeur);". Votre exemple démontre que vous n'avez pas besoin de fournir un nom d'élément (Chemin=) pour obtenir la valeur int. Donc, en utilisant la Liaison de chaîne de formatage option pour ajouter la Page "" texte en face de lui était facile de le faire (je faisais de la "Semaine x").
OriginalL'auteur Botz3000
Ok, Merci pour Botz3000 j'ai compris comment faire. (C'est un peu wiggy, mais il fonctionne très bien.)
Tout à coup, il est venu à moi: la Page de l'objet est un objet Document!! Doh!!
Donc, mon
PageTitleConvert
fait ça:OriginalL'auteur Jeffrey T. Whitney