¿Cómo puedo pasar un valor constante para 1 enlace en multi-enlace?

97

Tengo un enlace múltiple como

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

Y quiero pasar un valor fijo, por ejemplo, "123" a uno de los dos enlaces anteriores. ¿Cómo puedo hacer eso usando XAML?

Nam G VU
fuente
1
algún fragmento de código / ejemplos por favor?
Torsten
Creo que falta una parte de la pregunta, se refiere al enlace anterior, pero no veo ningún código vinculante en la pregunta.
Akjoshi
1
De alguna manera, cada vez que tengo una pregunta, alguien tenía exactamente la misma pregunta anteriormente :) ¡Genial!
Ignacio Soler García
1
Una cuarta forma de hacer esto sería usar esta respuesta: stackoverflow.com/a/2552911/222134
Johny Skovdal

Respuestas:

146

Si su valor es simplemente a string, puede especificarlo como una constante en la Sourcepropiedad de un enlace. Si se trata de cualquier otro tipo de datos primitivo, debe definir un recurso estático y hacer referencia a este.

Defina el sysespacio de nombres en la raíz del XAML al que apuntar Systemen mscorlib, y lo siguiente debería funcionar:

<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
fuente
1
@tofutim Eso es porque MultiBinding no parece tener recursos. Use TextBlock.Resources en su lugar ...
Martin Hennings
6
Tal vez debería agregar xmlns: sys = "clr-namespace: System; assembly = mscorlib" a su solución ;-)
c0d3b34n
103

O, combinando las dos respuestas anteriores:

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

Lo que proporciona el tipo correcto sin el kludge de Resources.

Anders Kaplan
fuente
1
Se necesita para definir el espacio de nombres sysen el encabezado del documento:xmlns:sys="clr-namespace:System;assembly=mscorlib"
Belleza
25

No sigo la pregunta, pero hay dos opciones:

Ponga la línea <Binding Source="123" />en su enlace múltiple que pasará 123 como un valor límite a su convertidor.

Ponga ConverterParameter="123"su MultiBinding:

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

benPearce
fuente
<Binding Source = "123" /> parece pasar DependencyProperty.UnsetValue
Josh Stribling
<Binding Source = "123" /> pasa la cadena "123" en lugar del entero o el doble que pretendía en mi caso.
Marcel Gosselin
En IValueConverter, los parámetros se pasan como object, lo que significa que necesitaría convertir el valor al tipo correcto, de una manera segura. IValueConverter.Convert
benPearce
4

No digo que esta sea una respuesta especialmente buena, pero aquí hay otro enfoque:

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