Я в настоящее время использую TextBlock
ниже для привязки значения названного свойства Name
:
<TextBlock Text="{Binding Name}" />
Теперь, я хочу связать другое названное свойство ID
к тому же TextBlock
.
Действительно ли возможно связать два или больше значения с тем же TextBlock
? Это может быть сделано с простой конкатенацией, как Name + ID
и, в противном случае как еще к этому можно было приблизиться?
Вы можете использовать MultiBinding
в сочетании со свойством StringFormat
. Использование будет выглядеть следующим образом:
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} + {1}">
<Binding Path="Name" />
<Binding Path="ID" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
При значении имени Foo
и значении идентификатора 1
, которое вы выводите в TextBlock, будет Foo + 1
].
Примечание:
это поддерживается только в .NET 3.5 SP1 и 3.0 SP2 или новее.
Если это будут просто текстовые блоки (и, следовательно, односторонняя привязка), и вы просто хотите для объединения значений просто свяжите два текстовых блока и поместите их в горизонтальную панель стека.
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}"/>
<TextBlock Text="{Binding ID}"/>
</StackPanel>
Это отобразит текст (который делают все текстовые блоки) без необходимости кодирования. Вы можете добавить к ним небольшой запас, чтобы они выглядели правильно.
Используйте 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;
}
}
и в разметке
<src:MyConverter x:Key="MyConverter"/>
. . .
<TextBlock Text="{Binding Name, Converter={StaticResource MyConverter Parameter=ID}}" />