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