可以';在绑定字符串上使用时,无法使简单的转换器工作

本文关键字:简单 工作 转换器 绑定 字符串 可以 | 更新日期: 2023-09-27 18:23:43

我定义了以下转换器(C#):

class BodyValueConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        string s = value.ToString();
        int prefixLength;
        if (!int.TryParse(parameter.ToString(), out prefixLength))
            return s;
        return s.Substring(0, prefixLength);
    }
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}

这将从传递的字符串的开头开始,并返回我指定为参数的字符数。

在我的XAML中,我实例化了转换器:

<local:BodyValueConverter x:Key="BodyValueConverter"/>

在尝试在文本块中使用此转换器时,我收到一个错误:

<DataTemplate x:Key="AppointmentTemplate">
    <StackPanel Orientation="Horizontal">
        <TextBlock Text="{Binding Subject}"></TextBlock>
        <TextBlock Text="{Binding Path=Subject, Converter={StaticResource BodyValueConverter}, ConverterParameter=1}"></TextBlock>
    </StackPanel>
</DataTemplate>

错误为:

XAMLParseException:在"System.Windows.Markup.StaticResourceHolder"上提供值时引发异常。

第一个文本块可以很好地显示主题。第二行给了我一个例外。

可以';在绑定字符串上使用时,无法使简单的转换器工作

XAML中对象的顺序是什么?

Converter必须在实际使用前定义,因此请确保您的<Converter>Resources 中高于<DataTemplate>

另一种选择是切换到使用DynamicResource而不是StaticResource,因为DynamicResource是在需要时评估的,而不是在加载XAML时评估的

当它找不到您要查找的静态资源时,通常会抛出该错误。您需要在静态资源中定义它。

<Window 
  .... snip ...
  xmlns:local="clr-namespace:YourLocalNamespace"
  <Window.Resources>
    <local:BodyValueConverter x:Key="BodyValueConverter"/>
  </Window.Resources>
  .... snip ....
  <DataTemplate x:Key="AppointmentTemplate">
    <StackPanel Orientation="Horizontal">
      <TextBlock Text="{Binding Subject}"></TextBlock>
      <TextBlock Text="{Binding Path=Subject, Converter={StaticResource BodyValueConverter}, ConverterParameter=1}"></TextBlock>
    </StackPanel>
  </DataTemplate>
</Window>

注意:这是您在Window中定义它的时候。你可以在其他地方定义它。

如果不是这个问题。。。。要找到解析错误的更详细解释…请查看内部异常文本。