Pass Wert eines Feldes Silverlight ConverterParameter
Schreibe ich meine erste Silverlight-Anwendung. Ich habe ein datagrid mit einer Spalte, zwei labels, für die labels, ich bin mit IValueConverter bedingt formatieren der Daten.
Die Bezeichnung "Inhalt" als solcher:
Content="{Binding HomeScore, Converter={StaticResource fmtshs}}"
und
Content="{Binding AwayScore, Converter={StaticResource fmtshs}}"
Den Konvertieren Methode meiner IValueConverter ist so:
Public Function Convert(
ByVal value As Object,
ByVal targetType As System.Type,
ByVal parameter As Object,
ByVal culture As System.Globalization.CultureInfo) As Object
Implements System.Windows.Data.IValueConverter.Convert
Dim score As Long = value, other As Long = parameter
Return If(score < 0, "",
If(score - other > 5, (other + 5).ToString, score.ToString)
)
End Function
Also, was ich tun möchte, ist in den Wandler für HomeScore, möchte ich weitergeben AwayScore der ConverterParameter, und für AwayScore möchte ich weitergeben die HomeScore des Wandlers. In der Konverter entweder Punktzahl, ich muss in der Lage sein, zu wissen, den Wert der anderen score für die Formatierung Zwecke.
Aber ich kann nicht herausfinden, die syntax für die Bindung der ConverterParameter zu einem anderen Feld.
Ich habe versucht, die folgenden:
Content="{Binding HomeScore, Converter={StaticResource fmtshs}, ConverterParameter=AwayScore}"
Content="{Binding HomeScore, Converter={StaticResource fmtshs}, ConverterParameter={AwayScore}}"
Content="{Binding HomeScore, Converter={StaticResource fmtshs}, ConverterParameter={Binding AwayScore}}"
Aber keiner von denen scheint zu funktionieren. Wie gebe ich ein Feld mit dem Wert der ConverterParameter?
Blick auf Multibind-Wandler stackoverflow.com/questions/377841/...
InformationsquelleAutor eidylon | 2009-08-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als Sie nicht bestehen können, aber alles andere als ein literal in der
ConverterParameter
die Lösung ist die übergabe des gesamten Objektes in den Konverter, und dann haben Sie Zugriff auf alle die Eigenschaften von innerhalb des Umrichters.Sodass Ihr code wird (vorausgesetzt, das Objekt ist genannt
Match
):(Entschuldigung für den Mangel an Details in den code)
Dann Ihre XAML wird
HINWEIS, Während Sie offenbar binden direkt an den Konverter, das ist nicht wirklich der Fall. Sie sind verbindlich, um den Daten-Kontext, ohne Angabe einer
Path
so können Sie den Zugriff auf die ganze Sache.Quelle
Nur zur Klarheit: @ChrisF, Sie sind nicht verbindlich und Konverter, wie Sie erwähnt in Ihrem HINWEIS. Sie sind verbindlich, um den aktuellen datacontext (wie Path = .), mit dem angegebenen Konverter. Die Bindung an den Konverter ist Unsinn.
in der Tat. Es war die Kurzform, die im Nachhinein ist verwirrend.
InformationsquelleAutor ChrisF
Sieht aus wie Sie versuchen zu binden, ConverterParameter, die ich fürchte, das können Sie nicht. ConverterParameter können nur Literale Werte e.g ConverterParameter='Dein string'
wenn Sie haben nicht herausgefunden noch, die einfachen Anführungszeichen sind, was Ihnen fehlt in Ihrer Frage code.
InformationsquelleAutor Andy Britcliffe
Ich hatte das gleiche problem, und musste schlafen. Scheint der Konverter bekommt "one-shot" beim abrufen der Daten - über die Bindung Wert.
So stellen Sie den Verbindlichen Wert einer komplexen Klasse. Wenn Sie mit M-V-VM, die Sie sollten die Daten-Gestaltung, sowieso, so dass ich aus der Bindung mit dem Wert 'härter arbeiten', indem Sie die display-Wert und die anderen Daten, die ich brauchte in meinem Konverter (erstellt eine geschlossene Klasse, wenn man so will).
Nächste, ich brauchte den Konverter 'härter arbeiten', mit seiner Einschränkung der Weitergabe ConverterParameters als Wert geben Sie die Literale, also ich erstelle ein Enum in meinem Konverter, und warf das literal auf Sie für mehr Eleganz in meine Konvertieren routine.
Was ich tun könnte, dann ist variieren Farbe (Pinsel) und der Dicke einer Grid-Zelle, basierend auf dem Wert angezeigt wird, und ein weiterer Schwellenwert (dass ich gegen).
Der Quellcode ist auf meinem blog-site, seine Silverlight-3-code mit Bindung in einem pseudo-M-V-VM-Mode (keine dependency injection, aber hey - its ein Beispiel, oder?)
download unter: http://www.martymazurik.com/file.axd?file=2010%2f6%2fHighlightGridCell.zip.txt
dann entfernen .txt
InformationsquelleAutor Marty Mazurik
ChrisF hat die einzige Lösung, die ich habe kommen können, Binden Sie die gesamte Daten-Objekt-Inhalt Eigenschaft und mit einem Konverter gebaut, um zu erwarten, dass dieses Objekt geben Sie analysieren die Eigenschaften, die Sie benötigen, im Konverter selbst.
InformationsquelleAutor Bron Skinner
Nicht ganz sicher, ob ich verstehe Ihr problem, aber ich glaube, Sie suchen für die Bindung, die mit "elementname"?
ex: http://www.wintellect.com/CS/blogs/jprosise/archive/2009/03/27/silverlight-3-s-new-element-data-binding.aspx
InformationsquelleAutor vidalsasoon
Wenn Sie möchten, binden Sie die Konverter-parameter, haben einen Blick auf diese: http://brandontruong.blogspot.com/2009/06/binding-for-converter-parameter.html Es ist vielleicht nicht die sauberste Lösung, aber es ist einfach und kann in manchen Situationen nützlich sein
InformationsquelleAutor Sue Maurizio