<Style x:Key="showTxt" TargetType="{x:Type TextBox}">
<Setter Property="Text">
<Setter.Value>
<!-- 多重绑定 -->
<MultiBinding StringFormat="{}{0}({1})">
<Binding Path="Name" />
<Binding Path="Count" />
</MultiBinding>
</Setter.Value>
</Setter>
</Style>
数据模型中有Name和Count两个参数,如下
public class sample
{
public string Name{get;set;}
public int Count{get;set;}
}
例如 Name="word",Count=7
所以上面的例子中,Text的结果就是
word(7)
这种绑定方式不需要转换器就可以显示两个或更多绑定参数合成的字符串格式
也可以这样写:
<TextBlock>
<TextBlock.Text>
<!-- 多重绑定 -->
<MultiBinding StringFormat="{}{0}({1})">
<Binding Path="Name" />
<Binding Path="Count" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
多重绑定使用转换器的写法如下:
<!-- Tag多重绑定 -->
<local:QuJiaoRichTextBox.Tag>
<MultiBinding Converter="{StaticResource MultiBindingConverter}">
<Binding Path="RowIndex"/>
<Binding Path="ColumeIndex"/>
</MultiBinding>
</local:QuJiaoRichTextBox.Tag>
转换器:
/// <summary>
/// 多对象绑定为一行
/// </summary>
[ValueConversion(typeof(object[]), typeof(string))]
public class MultiBindingConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
var list = new List<string>();
foreach (var val in values)
{
list.Add(val.ToString());
}
return string.Join(",", list);
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
多重绑定到另一个控件的写法
<Grid x:Name="itemGrid" Tag="{Binding sort}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Drop">
<command:EventToCommand
Command="{Binding Path=DropExchange,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=local:ReadingEditorView}}">
<command:EventToCommand.CommandParameter>
<!-- 多重绑定 -->
<MultiBinding Converter="{StaticResource MultiBindingConverter}">
<Binding Path="Tag" ElementName="itemGrid" />
</MultiBinding>
</command:EventToCommand.CommandParameter>
</command:EventToCommand>
</i:EventTrigger>
</i:Interaction.Triggers>
</Grid>