如何将多个值绑定到单个WPF文本块?
我目前正在使用下面的如何将多个值绑定到单个WPF文本块?,wpf,data-binding,binding,textblock,multibinding,Wpf,Data Binding,Binding,Textblock,Multibinding,我目前正在使用下面的TextBlock绑定名为Name的属性的值: <TextBlock Text="{Binding Name}" /> 现在,我想将另一个名为ID的属性绑定到相同的TextBlock 是否可以将两个或多个值绑定到同一个TextBlock?它可以通过简单的连接来实现吗,比如Name+ID,如果不能,还有其他方法可以实现吗?使用 在标记中 <src:MyConverter x:Key="MyConverter"/> 。 . 您可以使用与属性
TextBlock
绑定名为Name
的属性的值:
<TextBlock Text="{Binding Name}" />
现在,我想将另一个名为ID
的属性绑定到相同的TextBlock
是否可以将两个或多个值绑定到同一个TextBlock
?它可以通过简单的连接来实现吗,比如Name+ID
,如果不能,还有其他方法可以实现吗?使用
在标记中
<src:MyConverter x:Key="MyConverter"/>
。
.
您可以使用与属性组合的。用法如下所示:
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} + {1}">
<Binding Path="Name" />
<Binding Path="ID" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
给定Name
值Foo
和ID
值1
,则文本块中的输出将是Foo+1
注意:
这仅在.NET 3.5 SP1和3.0 SP2或更高版本中受支持。如果这些只是文本块(因此是单向绑定),而您只想连接值,只需绑定两个文本块并将它们放在水平堆栈面板中
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}"/>
<TextBlock Text="{Binding ID}"/>
</StackPanel>
这将显示文本(这是所有文本块所做的),而无需再进行任何编码。你可以给它们留一点空白,让它们看起来更合适。我知道这已经晚了,但我想我应该添加另一种方法 您可以利用文本属性可以使用“s”设置这一事实,因此您可以使用一次运行为每个绑定设置多个绑定。如果您没有访问多重绑定的权限(我在为Windows Phone开发时没有找到多重绑定),这将非常有用
@Preet-实际上,我不确定在这种情况下,{}是否是必需的,因为它是在MSDN示例中使用的,所以我将其包括在内。但是,一般来说,它需要作为XAML解析器的转义序列,以避免与绑定标记扩展混淆。如果在诸如DataGrid
之类的东西中使用此方法,很遗憾排序行为不起作用。一个更合适的解决方案是在模型中创建一个只读属性,并使用适当的字符串格式进行绑定。不用说,这是一种快速格式化的简洁方法,尽管有点冗长。您只需要{}当格式化字符串以参数{0}开头时,如果格式化字符串以文本开头则不需要。例如:“{{0}+{1}”第{0}页,共{1}”它在WPF项目.Net 4.0 Visual Studio 2017上不起作用。@Patrick的解决方案对我有效。我没法让它工作。我遇到此错误XamlParseException:无法在类型为“Binding”的“Path”属性上设置“Binding”。“绑定”只能在DependencyObject的DependencyProperty上设置。
当绑定到作为DynamicSource来源的多个字符串时,这是一种非常方便的方法,因为不能使用StringFormat的多重绑定。我刚刚尝试过这个方法。它可以工作,但是由于某种原因,绘制的每个元素(甚至几何体)(刷新时)现在都会闪烁每个记号。尝试另一种方法。如果文本必须本地化,这可能会变得很困难,因为顺序是硬编码的。这种方法的另一个用法是为每个绑定应用不同的样式2019Best Response是-这是6年前编写的,您将“Name”作为第一个参数绑定到转换器(代码中称为value),ID(问题中的字符串)作为第二个参数。
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} + {1}">
<Binding Path="Name" />
<Binding Path="ID" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}"/>
<TextBlock Text="{Binding ID}"/>
</StackPanel>
<TextBlock>
<Run Text="Name = "/>
<Run Text="{Binding Name}"/>
<Run Text=", Id ="/>
<Run Text="{Binding Id}"/>
</TextBlock>