¿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?


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>

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.


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">


<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" />
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.