two - ¿Cómo vincular múltiples valores a un solo WPF TextBlock?
wpf inotifypropertychanged (4)
Puede usar un MultiBinding
combinado con la propiedad StringFormat
. El uso sería similar al siguiente:
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} + {1}">
<Binding Path="Name" />
<Binding Path="ID" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
Dado un valor de Name of Foo
y un valor para ID de 1
, la salida en TextBlock sería Foo + 1
.
Note:
esto solo es compatible con .NET 3.5 SP1 y 3.0 SP2 o posterior.
Actualmente estoy usando el TextBlock
continuación para vincular el valor de una propiedad llamada Name
:
<TextBlock Text="{Binding Name}" />
Ahora, quiero vincular otra propiedad llamada ID
con el mismo TextBlock
.
¿Es posible vincular dos o más valores al mismo TextBlock
? ¿Se puede hacer con una concatenación simple, como Name + ID
y, de no ser así, de qué otra manera podría abordarse?
Sé que esta es una forma tarde, pero pensé que agregaría otra forma de hacerlo.
Puede aprovechar el hecho de que la propiedad Text se puede configurar con " Run s", por lo que puede configurar enlaces múltiples usando una Ejecución para cada uno. Esto es útil si no tiene acceso a MultiBinding (que no encontré cuando desarrollé para Windows Phone)
<TextBlock>
<Run Text="Name = "/>
<Run Text="{Binding Name}"/>
<Run Text=", Id ="/>
<Run Text="{Binding Id}"/>
</TextBlock>
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.
Use un ValueConverter
[ValueConversion(typeof(string), typeof(String))]
public class MyConverter: IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return string.Format("{0}:{1}", (string) value, (string) parameter);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return DependencyProperty.UnsetValue;
}
}
y en el marcado
<src:MyConverter x:Key="MyConverter"/>
. . .
<TextBlock Text="{Binding Name, Converter={StaticResource MyConverter Parameter=ID}}" />