Невозможно преобразовать ресурс в строку, используя TypeConverter - PullRequest
0 голосов
/ 23 марта 2009

Исключение:

Невозможно преобразовать значение в атрибуте «Текст» в объект типа 'System.String'. Невозможно наложить объект типа «MyApp.Foo» для ввода 'System.String'.

XAML:

<Window.Resources>
  <my:Foo x:Key="foo"></my:Foo>
</Window.Resources>

<TextBox Text="{DynamicResource foo}"></TextBox>

C #

[TypeConverter(typeof(FooConverter))]
public class Foo
{
    public Foo()
    {}
}

public class FooConverter : TypeConverter
{
    public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
    {
        return true;
    }

    public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
    {
        return "Foo";
    }
}

Что не так?

1 Ответ

3 голосов
/ 23 марта 2009

Вам не нужно использовать конвертер значений вместо преобразователя типов.

XAML

<Window.Resources>  
    <my:Foo x:Key="foo"/>
    <my:FooConverter x:Key="fooConverter />
</Window.Resources>
<TextBox Text="{DynamicResource foo, Converter={DynamicResource fooConverter}}"></TextBox>

C #

public class FooConverter : IValueConverter
{ 
     public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
     {
          return ((Foo)value).ToString();
     }
 }
...