我创建了一个基础视图模型,将所有视图模型的公共属性放入其中,并由我的C# Silverlight应用程序的所有视图模型实现。
我的基础视图模型还为所有视图模型实现了INotifyPropertyChanged
接口。
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
经常调用
PropertyChanged
事件时,会出现以下错误:Error HRESULT E_FAIL has been returned from a call to a COM component.
堆栈跟踪是
在MS.Internal.XcpImports.CheckHResult(UInt32 hr)处检查HResult 在MS.Internal.XcpImports.SetValue(IManagedPeerBase obj, DependencyProperty property, DependencyObject doh)处设置值 在MS.Internal.XcpImports.SetValue(IManagedPeerBase doh, DependencyProperty property, Object obj)处设置值 在System.Windows.DependencyObject.SetObjectValueToCore(DependencyProperty dp, Object value)处设置对象值 在System.Windows.DependencyObject.SetEffectiveValue(DependencyProperty property, EffectiveValueEntry& newEntry, Object newValue)处设置有效值 在System.Windows.DependencyObject.UpdateEffectiveValue(DependencyProperty property, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, ValueOperation operation)处更新有效值 在System.Windows.DependencyObject.SetValueInternal(DependencyProperty dp, Object value, Boolean allowReadOnlySet, Boolean isBindingInStyleSetter)处设置值 在System.Windows.Controls.Control.set_DefaultStyleKey(Object value)处设置默认样式键 在System.Windows.Controls.ContentControl..ctor()处构造内容控件 在MS.Internal.CoreTypes.GetCoreWrapper(UInt32 typeId)处获取核心包装器 在MS.Internal.ManagedPeerTable.EnsureManagedPeer(IntPtr unmanagedPointer, Int32 typeIndex, Type type, Boolean preserveManagedObjectReference)处确保托管对等体 在MS.Internal.XcpImports.ConvertDO(IntPtr doPointer, Int32 typeIndex, Boolean releaseObjectReference)处转换DO 在MS.Internal.XcpImports.ConvertType(CValue outVal, Int32 typeIndex, Boolean releaseObjectReference, Boolean deleteBuffer, IManagedPeerBase fromObject)处转换类型 在MS.Internal.XcpImports.ConvertCValueForManagedWithType(Type propertyType, CValue& outVal, Int32 outDOType, Boolean releaseObjectReference, Boolean deleteBuffer, IManagedPeerBase fromObject)处转换CValue为托管类型 在MS.Internal.XcpImports.GetValue(IManagedPeerBase managedPeer, DependencyProperty property)处获取值 在System.Windows.DependencyObject.GetValueInternal(DependencyProperty dp)处获取对象的内部值 在System.Windows.FrameworkElement.GetValueInternal(DependencyProperty dp)处获取框架元素的内部值 在System.Windows.FrameworkElement.get_Parent()处获取父级元素 在Telerik.Windows.RadRoutedEventHelper.FindParent(FrameworkElement item)处查找父级 在Telerik.Windows.RadRoutedEventHelper.BuildRoute(DependencyObject element, EventRoute route, RadRoutedEventArgs args)处构建路由 在Telerik.Windows.RadRoutedEventHelper.RaiseEvent(DependencyObject element, RadRoutedEventArgs args)处引发事件 在Telerik.Windows.DependencyObjectExtensions.RaiseEvent(DependencyObject element, RadRoutedEventArgs e)处引发事件 在Telerik.Windows.Controls.Selector.OnSelectionChanged(SelectionChangedEventArgs e)处选择改变时触发 在Telerik.Windows.Controls.RadComboBox.OnSelectionChanged(SelectionChangedEventArgs e)处选择改变时触发 在Telerik.Windows.Controls.Selector.OnSelectionChanged(Object sender, SelectionChangedEventArgs e)处选择改变时触发 在Telerik.Windows.Controls.Selector.SelectionChanger`1.InvokeSelectionChangedEvent()处调用选择改变事件 在Telerik.Windows.Controls.Selector.SelectionChanger`1.End()处结束选择 在Telerik.Windows.Controls.Selector.SelectionChanger`1.SelectJustThisItem(T item)处只选择此项 在Telerik.Windows.Controls.Selector.SelectItemWithValue(Object value)处选择具有值的项 在Telerik.Windows.Controls.Selector.CoerceSelectedValue(Object value)处强制选择的值 在Telerik.Windows.Controls.Selector.OnCoerceSelectedValue(DependencyObject sender, Object newValue)处在强制选择值时触发 在Telerik.Windows.PropertyMetadata.DoCoercion(Func`3 areValuesEqual, DependencyObject d, DependencyProperty dp, CoerceValueCallback coerceCallback, Object defaultBaseValue, Boolean forceNewBaseValue, Boolean& isReentrantImplicitCoercion)处执行强制转换 在Telerik.Windows.PropertyMetadata.PropertyChangeHook.OnPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)处属性更改时触发 在System.Windows.DependencyObject.RaisePropertyChangeNotifications(DependencyProperty dp, Object oldValue, Object newValue)处引发属性更改通知 在System.Windows.DependencyObject.UpdateEffectiveValue(DependencyProperty property, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, ValueOperation operation)处更新有效值