WPF / C#将两个文本框中的内容绑定到单个标签

时间:2018-02-15 09:47:18

标签: c# wpf data-binding

我一直在尝试将两个文本框绑定到一个标签,因此标签总是会根据两个文本框的内容进行更新。但没有运气。我设法解决了如何绑定一个。

使用

Content="{Binding Text,ElementName=PersonName,UpdateSourceTrigger=PropertyChanged}"

所以看起来像这样

<UserControl x:Class="FitTracker.CreateTrackItem"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:FitTracker"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
  <Grid>    
    <TextBox Name="PersonName" HorizontalAlignment="Left" Height="23" Margin="10,77,0,0" TextWrapping="Wrap" Text="Name" VerticalAlignment="Top" Width="280" />
    <TextBox Name="PersonLevel" HorizontalAlignment="Left" Height="23" Margin="10,105,0,0" TextWrapping="Wrap" Text="Level" VerticalAlignment="Top" Width="280"/>
    <Label Name="TrackDetails" Content="{Binding Text,ElementName=PersonName,UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Left" Margin="10,133,0,0" VerticalAlignment="Top" Width="280" FontWeight="Bold" Background="#00000000" Foreground="White" />
  </Grid>
</UserControl>

但是我不能用两个文本框来做。任何可以帮助我走上正确道路的想法或指南。

我一直在寻找几个小时。

3 个答案:

答案 0 :(得分:3)

使用MultiBinding:

<TextBox x:Name="PersonName"/>
<TextBox x:Name="PersonLevel"/>
<TextBlock>
    <TextBlock.Text>
        <MultiBinding StringFormat="Name: {0}, Level: {1}">
            <Binding Path="Text" ElementName="PersonName"/>
            <Binding Path="Text" ElementName="PersonLevel"/>
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

答案 1 :(得分:1)

您可以将TextBlock与多个Run元素一起使用:

<TextBox x:Name="PersonName"/>
<TextBox x:Name="PersonLevel"/>
<TextBlock>
    <TextBlock.Inlines>
        <Run Text="{Binding Text, ElementName=PersonName}"/>
        <Run Text="{Binding Text, ElementName=PersonLevel}"/>
    </TextBlock.Inlines>
<TextBlock>

答案 2 :(得分:0)

您还可以声明一个新属性,例如

public string JoinedProps {get {return PersonName+ PersonLevel;}}

不要忘记在两个PersonName上通知JoinedProps的属性更改  和PersonLevel字段