我在物理手机上运行此代码时遇到错误,但在模拟器上没有:
System.ArgumentException“参数不正确”
当我使用以下代码时。这是我创建的自定义类型,允许我轻松创建可以绑定到视图的类型。
此行引发异常:
this.PropertyChanged(this, new PropertyChangedEventArgs("Value"));
这个工作完全正常,直到我制作Generic:
public class BindableType<T> : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private T _value;
private T _previousValue;
public T Value
{
get
{
return _value;
}
set
{
_previousValue = _value;
_value = value;
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs("Value"));
}
}
}
public T PreviousValue
{
get { return _previousValue; }
}
}
这是绑定代码:
这是堆栈跟踪:
在MS.Internal.XcpImports.CheckHResult(UInt32 hr)at MS.Internal.XcpImports.SetValue(IManagedPeerBase obj, DependencyProperty属性,Double d)at MS.Internal.XcpImports.SetValue(IManagedPeerBase doh, DependencyProperty属性,Object obj)at System.Windows.DependencyObject.SetObjectValueToCore(的DependencyProperty dp,对象值)at System.Windows.DependencyObject.SetEffectiveValue(的DependencyProperty property,EffectiveValueEntry&amp; newEntry,Object newValue)at System.Windows.DependencyObject.UpdateEffectiveValue(的DependencyProperty property,EffectiveValueEntry oldEntry,EffectiveValueEntry&amp;新条目, ValueOperation操作)at System.Windows.DependencyObject.RefreshExpression(的DependencyProperty dp)at System.Windows.Data.BindingExpression.RefreshExpression()
在System.Windows.Data.BindingExpression.SendDataToTarget()at System.Windows.Data.BindingExpression.SourcePropertyChanged(PropertyPathListener 发件人,PropertyPathChangedEventArgs args)at System.Windows.PropertyPathListener.RaisePropertyPathStepChanged(PropertyPathStep 来源) System.Windows.PropertyAccessPathStep.RaisePropertyPathStepChanged(PropertyListener 来源) System.Windows.CLRPropertyListener.SourcePropertyChanged(对象 发件人,PropertyChangedEventArgs args)at System.Windows.Data.WeakPropertyChangedListener.PropertyChangedCallback(对象 发件人,PropertyChangedEventArgs args)at RoadCast.Model.BindableType1.set_Value(Double value) at RoadCast.Default.locationHelper_PositionChangedMinor(Object sender, GeoPositionChangedEventArgs
1 args)at RoadCast.Core.LocationHelper.watcher_PositionChanged(对象发送者, GeoPositionChangedEventArgs`1 e)at System.Device.Location.GeoCoordinateWatcher&LT;&GT; C_ DisplayClass1.b _0(对象 _)at System.Reflection.RuntimeMethodInfo.InternalInvoke(RuntimeMethodInfo) rtmi,Object obj,BindingFlags invokeAttr,Binder binder,Object 参数,CultureInfo文化,布尔isBinderDefault,汇编 调用者,布尔验证访问,StackCrawlMark&amp; stackMark)at System.Reflection.RuntimeMethodInfo.InternalInvoke(Object obj, BindingFlags invokeAttr,Binder binder,Object []参数, CultureInfo culture,StackCrawlMark&amp; stackMark)at System.Reflection.MethodBase.Invoke(Object obj,Object []参数)
在System.Delegate.DynamicInvokeOne(Object [] args)at System.MulticastDelegate.DynamicInvokeImpl(Object [] args)at System.Delegate.DynamicInvoke(Object [] args)at System.Windows.Threading.DispatcherOperation.Invoke()at System.Windows.Threading.Dispatcher.Dispatch(的DispatcherPriority System.Windows.Threading.Dispatcher.OnInvoke(Object。的优先级) System.Windows.Hosting.CallbackCookie.Invoke(Object []上下文) args)at System.Windows.Hosting.DelegateWrapper.InternalInvoke(Object [] args)
在System.Windows.RuntimeHost.ManagedHost.InvokeDelegate(IntPtr pHandle,Int32 nParamCount,ScriptParam [] pParams,ScriptParam&amp; pResult)
更新:将属性重命名为“InternalValue”为我修复此问题。
答案 0 :(得分:0)
您需要将PropertyChanged初始化为:
public event PropertyChangedEventHandler PropertyChanged = delegate { };