Как связать несколько значений с одним текстовым блоком WPF?
В настоящее время я использую TextBlock
ниже для привязки значения свойства с именем Name
:
<TextBlock Text="{Binding Name}" />
Теперь я хочу связать другое свойство с именем ID
с тем же TextBlock
.
Можно ли связать два или более значений с тем же TextBlock
? Можно ли это сделать с помощью простой конкатенации, например Name + ID
, а если нет, то как еще можно это подходить?
Ответы
Ответ 1
Вы можете использовать MultiBinding
в сочетании с StringFormat
собственность. Использование будет напоминать следующее:
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} + {1}">
<Binding Path="Name" />
<Binding Path="ID" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
Учитывая значение Name Foo
и значение для идентификатора 1
, которое вы выведете в TextBlock, будет Foo + 1
.
Note:
, что это поддерживается только в .NET 3.5 SP1 и 3.0 с пакетом обновления 2 (SP2) или более поздней версии.
Ответ 2
Я знаю, что это путь поздно, но я думал, что добавлю еще один способ сделать это.
Вы можете воспользоваться тем фактом, что свойство Text можно установить с помощью Run s ", поэтому вы можете настроить несколько привязок, используя команду" Запуск для каждый. Это полезно, если у вас нет доступа к MultiBinding (которого я не нашел при разработке для Windows Phone)
<TextBlock>
<Run Text="Name = "/>
<Run Text="{Binding Name}"/>
<Run Text=", Id ="/>
<Run Text="{Binding Id}"/>
</TextBlock>
Ответ 3
Если это просто текстовые блоки (и, следовательно, односторонняя привязка), и вы просто хотите объединить значения, просто привяжите два текстовых блока и поместите их в горизонтальную стеквую панель.
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}"/>
<TextBlock Text="{Binding ID}"/>
</StackPanel>
Это отобразит текст (который все Textblocks делает), не делая больше кодирования. Вы можете наложить на них небольшой запас, чтобы они выглядели правильно.
Ответ 4
Используйте 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}}" />