我有以下绑定
<Display.Value>
<MultiBinding StringFormat="{}{0} ({1})">
<Binding Path="Nickname" />
<Binding Path="FullName" />
</MultiBinding>
</Display.Value>
根据MultiBinding class documentation,这是正确的语法。但是,当我将它绑定到value属性时,只显示一个空字符串。但是,当我使用SingleBinding或仅使用普通Binding时,此属性可用。
public object Value
{
get { return (object)GetValue(ValueProperty); }
set { SetValue(ValueProperty, value); }
}
public static readonly DependencyProperty ValueProperty =
DependencyProperty.Register("Value", typeof(object), typeof(Display), new PropertyMetadata(String.Empty));
但是,当我在另一个附加属性上绑定我的多重绑定时(这次,类型是字符串)
public string Caption
{
get { return (string)GetValue(CaptionProperty); }
set { SetValue(CaptionProperty, value); }
}
public static readonly DependencyProperty CaptionProperty =
DependencyProperty.Register("Caption", typeof(string), typeof(Display), new PropertyMetadata(String.Empty));
任何想法为什么多重绑定不适用于Value
但适用于Caption
?是因为Value的对象类型?如何使MultiBinding与Value
一起使用?
答案 0 :(得分:0)
这对我有用:
<Window ....
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<Grid>
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} - ({1})">
<Binding Path="Value.Nickname"/>
<Binding Path="Value.FullName"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</Grid>
</Window>
public class Value
{
public static readonly DependencyProperty NicknameProperty =
DependencyProperty.Register("Nickname", typeof(string), typeof(Value), new PropertyMetadata(string.Empty));
public string Nickname
{
get { return (string)GetValue(NicknameProperty); }
set { SetValue(NicknameProperty, value); }
}
public static readonly DependencyProperty FullNameProperty =
DependencyProperty.Register("FullName", typeof(string), typeof(Value), new PropertyMetadata(string.Empty));
public string FullName
{
get { return (string)GetValue(FullNameProperty); }
set { SetValue(FullNameProperty, value); }
}
public Value()
{
Nickname = "Nickname";
FullName = "FullName";
}
}
所以聊天之后最好在处理非字符串时使用Converter。使用StringFormat将使用字符串。
答案 1 :(得分:0)
MultiBinding
知道目标属性的类型,如果它不是string
类型,你应该得到这个binding error:
System.Windows.Data错误:31:无法设置MultiBinding,因为必须指定MultiValueConverter。 MultiBinding: 'System.Windows.Data.MultiBinding'
您可以将TextBlock
分配给Value
,Text
通过MultiBinding
绑定,或者您当然可以使用转换器。