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