我正在尝试在数据网格单元的工具顶部中绑定两个文本源。所以这是 xaml:
<Style x:Key="DataGridCellStyle" TargetType="{x:Type DataGridCell}">
<Style.Setters>
<!--Some other setter properties-->
<Setter Property="ToolTip">
<Setter.Value>
<MultiBinding Converter="{StaticResource TooltipMultiValueConverter}" UpdateSourceTrigger="PropertyChanged">
<Binding Path="{Binding Path=ControlValue, Converter = {StaticResource FloatToString}, ConverterParameter=F2}"></Binding>
<Binding Path="{Binding Path=StatusText}"></Binding>
</MultiBinding>
</Setter.Value>
</Setter>
</Style.Setters>
</Style>
以及 c# 中的相应转换器:
class TooltipMultiValueConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return String.Concat(values[0], " ", values[1]);
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
但是由于以下错误,我的应用程序每次都会崩溃:
'Provide value on 'System.Windows.Markup.StaticResourceHolder' threw an exception.'
我不知道我应该提供什么价值?如果我不使用多重绑定并提供单个文本源作为值,它就可以了......
您应该将
MultiBinding
的 Converter
属性设置为您的TooltipMultiValueConverter
但您不需要转换 ControlValue
属性,因为 String.Concat
方法接受类型 object
的参数:
<local:TooltipMultiValueConverter x:Key="TooltipMultiValueConverter" />
<Style x:Key="DataGridCellStyle" TargetType="{x:Type DataGridCell}">
<Style.Setters>
<!--Some other setter properties-->
<Setter Property="ToolTip">
<Setter.Value>
<MultiBinding Converter="{StaticResource TooltipMultiValueConverter}">
<Binding Path="{Binding Path=ControlValue}"></Binding>
<Binding Path="{Binding Path=StatusText}"></Binding>
</MultiBinding>
</Setter.Value>
</Setter>
</Style.Setters>
</Style>