我遇到了以下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!
}
}
不知道发生了什么。没有内在的例外。
答案 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事件。