WPF - Невозможно преобразовать '<null>' из типа '<null>' в тип 'System.Uri' - PullRequest
1 голос
/ 05 мая 2009

У меня есть простой пользовательский элемент управления для отображения гиперссылки в текстовом блоке:

LinkTextBlock.xaml:

<TextBlock >
    <Hyperlink NavigateUri="{Binding Url, ElementName=root}" >
        <TextBlock Text="{Binding Text, ElementName=root}" />
    </Hyperlink>   
</TextBlock>

LinkTextBlock.xaml.cs:

public static readonly DependencyProperty UrlProperty = DependencyProperty.Register("Url", typeof (string), typeof (LinkTextBlock));
public string Url
{
    get { return (string) GetValue(UrlProperty); }
    set { SetValue(UrlProperty, value); }
}
public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof (string), typeof (LinkTextBlock));
public string Text
{
    get { return (string) GetValue(TextProperty); }
    set { SetValue(TextProperty, value); }
}


Затем в DataTemplate для ListBox у меня есть:

<Controls:LinkTextBlock Text="{Binding Email}" Url="{Binding Email}" />


Когда я запускаю приложение, оно, кажется, работает отлично. Элемент управления показывает гиперссылки правильно, и нет никаких видимых проблем. Однако, когда я смотрю в окно вывода, я получаю исключения, по одному для каждого элемента ListBox:

Ошибка System.Windows.Data: 22: невозможно конвертировать '' из типа '' в введите 'System.Uri' для культуры 'en-US' с преобразованиями по умолчанию; рассматривать используя свойство Converter Binding. NotSupportedException: 'System.NotSupportedException: UriTypeConverter не может конвертировать из (ноль). в System.ComponentModel.TypeConverter.GetConvertFromException (Объект значение) в System.ComponentModel.TypeConverter.ConvertFrom (ITypeDescriptorContext контекст, КультураИнфо культура, Объект значение) в System.UriTypeConverter.ConvertFrom (ITypeDescriptorContext контекст, КультураИнфо культура, Объект значение) в MS.Internal.Data.DefaultValueConverter.ConvertHelper (Объект o, введите destinationType, DependencyObject targetElement, КультураИнфо, Булевская культура isForward) '

Почему это происходит? Я знаю, что ошибка привязки является результатом привязки к NavigateURI. У вас есть предложения для меня? Что я могу с этим поделать? Я действительно ценю ваш вклад.

Спасибо

Ответы [ 2 ]

3 голосов
/ 05 мая 2009

Я понял это. Проблема заключается в выполнении неявного преобразования из строки в Uri, поскольку NavigateUri имеет тип Uri. Мне нужно было создать конвертер для преобразования строки в Uri, изменить свое свойство с String на Uri, и все работало нормально без исключений.

0 голосов
/ 05 мая 2009

Разве это не должно

<TextBlock >
    <Hyperlink NavigateUri="{Binding Url, ElementName=root}" >
        <TextBlock Text="{Binding Text, ElementName=root}" />
    </Hyperlink>   
</TextBlock>

быть этим?

<TextBlock  Text="{Binding Text, ElementName=root}">
    <Hyperlink NavigateUri="{Binding Url, ElementName=root}" />
</TextBlock>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...