Как связать несколько значений с единственным WPF TextBlock?

Я в настоящее время использую TextBlock ниже для привязки значения названного свойства Name:

<TextBlock Text="{Binding Name}" />

Теперь, я хочу связать другое названное свойство ID к тому же TextBlock.

Действительно ли возможно связать два или больше значения с тем же TextBlock? Это может быть сделано с простой конкатенацией, как Name + ID и, в противном случае как еще к этому можно было приблизиться?

191
задан Malu MN 25 May 2016 в 01:37
поделиться

3 ответа

Вы можете использовать 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 или новее.

406
ответ дан 23 November 2019 в 05:32
поделиться

Если это будут просто текстовые блоки (и, следовательно, односторонняя привязка), и вы просто хотите для объединения значений просто свяжите два текстовых блока и поместите их в горизонтальную панель стека.

    <StackPanel Orientation="Horizontal">
        <TextBlock Text="{Binding Name}"/>
        <TextBlock Text="{Binding ID}"/>
    </StackPanel>

Это отобразит текст (который делают все текстовые блоки) без необходимости кодирования. Вы можете добавить к ним небольшой запас, чтобы они выглядели правильно.

22
ответ дан 23 November 2019 в 05:32
поделиться

Используйте 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}}" />
11
ответ дан 23 November 2019 в 05:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: