WPF: Binden DisplayMemberPath in eine combobox-Komponente auf das Element
Ok, das ist irgendwie seltsam, aber das ist im Grunde das, was ich brauche. Ich habe ein WPF-Steuerelement, das gebunden ist, um ein Document-Objekt. Das Dokument-Objekt verfügt über eine Seiten-Eigenschaft. Also in meinem ViewModel, ich habe eine CurrentDocument-Eigenschaft, und eine CurrentPage-Eigenschaft.
Nun, ich habe eine combobox, die ich gebunden haben, um die CurrentDocument.Pages-Eigenschaft und aktualisiert die CurrentPage-Eigenschaft.
<ComboBox ItemsSource="{Binding CurrentDocument.Pages}"
DisplayMemberPath="???"
SelectedItem="{Binding CurrentPage, Mode=TwoWay}">
</ComboBox>
Mit mir so weit? All dies ist in Ordnung, außer dass ich brauche den DisplayMemberPath zu zeigen, "Seite 1", "Seite 2", etc.....
Ich habe versucht, erstellen einen Konverter wie diesen:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string pageNumber = "Page {0}";
return string.Format(pageNumber, value);
}
Und versuchte sich zu binden DisplayMemberPath es so:
DisplayMemberPath="{Binding RelativeSource={RelativeSource Self}, Path=Index, Converter={StaticResource pgTitleConv}}"
Aber es immer noch nicht zeigen, bis in das Kombinationsfeld text!!!
Gibt es keinen "Index" - Eigenschaft, aber ich weiß nicht, wie dies zu tun...Wie kann ich Zugriff auf den index des Elements, das die combobox ist die Bindung an...??????
InformationsquelleAutor Jeffrey T. Whitney | 2009-07-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
versuchen Sie dies:
und in Ihrem valueconverter, wenn Sie Zugriff auf die pages-Auflistung, die Sie verwenden können CurrentDocument.Seiten.IndexOf(Wert), um den index der gebundenen Element. Ich bin sicher, es gibt eine bessere Weise aber.
+1 Große trick !
Funktioniert, aber mit einem Konverter die Leistung beeinträchtigt. Ich angepasst, oben, um die Bindung StringFormat-Funktion. zB. <TextBlock Text="{Binding StringFormat={}{0:Page\: #0}}" />
Einfach nur neugierig, wie viel performance-Unterschied ist da? Wie hast du es gemessen? Und wo ist die Seite index im format-string?
Sein Beispiel zeigt, dass er die Formatierung ein int-Wert (page number/index) " - Zeichenfolge.Format(Seitennummer, Wert);". Dein Beispiel zeigt, die Sie nicht brauchen, um eine element name (Path=), um den int-Wert. Also die Bindung ist string-formatter-option, um die "Seite" - text vor, war es einfach Weg, das zu tun (ich war dabei "Woche x").
InformationsquelleAutor Botz3000
Ok, Dank Botz3000 ich herausgefunden, wie dies zu tun. (Es ist ein bisschen wiggy, aber es funktioniert gut.)
Plötzlich kam es mir: das Page-Objekt ist ein Dokument-Objekt!! Doh!!
So, meine
PageTitleConvert
gerade tut:InformationsquelleAutor Jeffrey T. Whitney