1

我遇到了以下 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 属性的设置器,代码是:

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!
     }
}

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

4

1 回答 1

1

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

//像这样的东西?

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

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

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

于 2013-06-25T19:59:32.797 回答