UriTypeConverter无法转换(null)

时间:2013-06-25 19:19:19

标签: c# wpf mvvm

我遇到了以下NotSupportedException:

UriTypeConverter无法转换为(null)。

以下是发生错误的初始代码:

SlideViewModel s = new SlideViewModel() { Duration = 8 };
_slideList.Add(s);
SlideView = CollectionViewSource.GetDefaultView(_slideList);
SelectedSlide = s; //This is where it crashes

_slideList是SlideViewModels的ObservableCollection。 SelectedSlide是一个SlideViewModel。

进入SelectedSlide属性的setter,代码为:

set
{
     if (_selectedSlide != value)
     {
          _selectedSlide = value;
          RaisePropertyChanged("SelectedSlide");
      }
 }

进一步了解RaisePropertyChanged函数:

protected void RaisePropertyChanged(String propertyName)
{
     VerifyPropertyName(propertyName);
     OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
}

然后OnPropertyChanged:

protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
{
     var handler = this.PropertyChanged;
     if (handler != null)
     {
          handler(this, e); //Crashes here!
     }
}

不知道发生了什么。没有内在的例外。

1 个答案:

答案 0 :(得分:1)

您正在省略XAML绑定代码,但是从错误类型来看, UriTypeConverter cannot convert from (null). 这是一种可能性。 如果我理解正确,SlideViewModel是SlideViewModel的类型,在某处,您将XAML绑定到SlideViewModel

//这样的事情?    

SlideViewModel上的某些属性可能是一个字符串。 Uri期待一种Uri。 如果这是正确的,您需要创建一个从Uri转换为String的转换器 在绑定中使用它如:

<SomeElement Uri="{Binding SlideViewModel.SomeProperty,
                           Converter={StaticResource MyUriToStringConverter}",.../> 

如果您正在使用转换器,请确保它处理空值。 同样,如果没有xaml或您的目标绑定,很难看到谁在响应SlideViewModel的PropertyChanged事件。

相关问题