wpf - ¿Cómo puedo pasar un valor constante por 1 enlace en multi-binding?




multibinding (5)

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?


Answers

No estoy diciendo que esta sea una respuesta especialmente buena, pero este es otro enfoque:

<Binding Path="DoesNotExist" FallbackValue="123" />

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

Defina el espacio de nombres sys en la raíz del XAML para apuntar a System en 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>

No acabo de seguir la pregunta, pero hay dos opciones:

Ponga la línea <Binding Source="123" /> en su multibinding pasará 123 como un valor vinculado a su convertidor.

Coloque ConverterParameter="123" en su MultiBinding:

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


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>

Que proporciona el tipo correcto sin el kludge de Recursos.


Si estos solo van a ser bloques de texto (y por lo tanto unidireccionales), y solo desea concatenar valores, solo una dos bloques de texto y colóquelos en un panel de distribución horizontal.

    <StackPanel Orientation="Horizontal">
        <TextBlock Text="{Binding Name}"/>
        <TextBlock Text="{Binding ID}"/>
    </StackPanel>

Eso mostrará el texto (que es todo lo que hace Textblocks) sin tener que hacer ninguna codificación adicional. Puede ponerles un pequeño margen para que se vean bien.





wpf binding multibinding