Wie kann ich einen konstanten Wert für 1 Bindung bei Mehrfachbindung übergeben?

97

Ich habe eine Mehrfachbindung wie

<TextBlock>
    <TextBlock.Text>
        <MultiBinding Converter="{StaticResource myConverter}">
            <Binding Path="myFirst.Value" />
            <Binding Path="mySecond.Value" />
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

Und ich möchte einen festen Wert, z. B. "123", an eine der beiden obigen Bindungen übergeben. Wie kann ich das mit XAML machen?

Nam G VU
quelle
1
irgendwelche Code-Schnipsel / Beispiele bitte?
Torsten
Ich denke, ein Teil der Frage fehlt. Sie beziehen sich auf die Bindung oben, aber ich sehe keinen Bindungscode in der Frage.
Akjoshi
1
Irgendwie hatte jedes Mal, wenn ich eine Frage habe, jemand genau die gleiche Frage zuvor :) Großartig!
Ignacio Soler Garcia
1
Ein vierter Weg, dies zu tun, wäre die Verwendung dieser Antwort: stackoverflow.com/a/2552911/222134
Johny Skovdal

Antworten:

146

Wenn Ihr Wert einfach a ist string, können Sie ihn als Konstante in der SourceEigenschaft einer Bindung angeben . Wenn es sich um einen anderen primitiven Datentyp handelt, müssen Sie eine statische Ressource definieren und darauf verweisen.

Definieren Sie den sysNamespace im Stammverzeichnis der XAML, auf den Systemin mscorlib verwiesen werden soll, und Folgendes sollte funktionieren:

<TextBlock>
  <TextBlock.Resources>
    <sys:Int32 x:Key="fixedValue">123</sys:Int32>
  </TextBlock.Resources>
  <TextBlock.Text>
    <MultiBinding Converter="{StaticResource myConverter}">
      <Binding Path="myFirst.Value" />
      <Binding Source="{StaticResource fixedValue}" />
    </MultiBinding>
  </TextBlock.Text>
</TextBlock>
Noldorin
quelle
1
@tofutim Das liegt daran, dass MultiBinding keine Ressourcen zu haben scheint. Verwenden Sie stattdessen TextBlock.Resources ...
Martin Hennings
6
Vielleicht sollten Sie xmlns: sys = "clr-namespace: System; assembly = mscorlib" zu Ihrer Lösung
hinzufügen ;-)
103

Oder kombinieren Sie die beiden obigen Antworten:

<MultiBinding Converter="{StaticResource ScalingConverter}">
    <Binding>
        <Binding.Source>
            <sys:Double>0.5</sys:Double>
        </Binding.Source>
    </Binding>
    <Binding ElementName="TC" Path="ActualWidth" />
</MultiBinding>

Welches bietet den richtigen Typ ohne die Ressourcen kludge.

Anders Kaplan
quelle
1
Es wird benötigt, um den Namespace sysam Dokumentenkopf zu definieren :xmlns:sys="clr-namespace:System;assembly=mscorlib"
Beauty
25

Ich folge der Frage nicht ganz, aber es gibt zwei Möglichkeiten:

<Binding Source="123" />Wenn Sie die Zeile in Ihre Mehrfachbindung einfügen, wird 123 als gebundener Wert an Ihren Konverter übergeben.

ConverterParameter="123"Fügen Sie Ihre MultiBinding ein:

<MultiBinding Converter="{StaticResource conv}" ConverterParameter="123">

benPearce
quelle
<Binding Source = "123" /> scheint DependencyProperty.UnsetValue
Josh Stribling
<Binding Source = "123" /> übergibt die Zeichenfolge "123" anstelle der Ganzzahl oder des Doppelten, die ich in meinem Fall beabsichtigt habe.
Marcel Gosselin
In IValueConverterwerden die Parameter als übergeben object, was bedeutet, dass Sie den Wert auf sichere Weise in den richtigen Typ umwandeln müssen. IValueConverter.Convert
benPearce
4

Ich sage dies nicht als besonders gute Antwort, aber hier ist ein anderer Ansatz:

<Binding Path="DoesNotExist" FallbackValue="123" />
David Hollinshead
quelle