Ошибка при создании события PropertyChanged в INotifyPropertyChanged - PullRequest
1 голос
/ 23 декабря 2011

Я получаю сообщение об ошибке при запуске этого кода на физическом телефоне, но не на эмуляторе:

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«.SetObjectValueToCore (DependencyProperty dp, Значение объекта) в System.Windows.DependencyObject.SetEffectiveValue (свойство DependencyProperty, EffectiveValueEntry & newEntry, Object newValue) в System.Windows.DependencyObject.Univement.Windows.DependencyObject.RefreshExpression (DependencyProperty dp) в System.Windows.Data.BindingExpression.RefreshExpression ()
в System.Windows.Data.BindingExpression.SendDataToTarget () в System.Windows.Data.BindingExpression.SourcePropertyChanged (PropertyPgsHerPhint.Ru)) при System.Windows.PropertyPathListener.RaisePropertyPathStepChanged (источник PropertyPathStep) в System.Windows.PropertyAccessPathStep.RaisePropertyPathStepChanged (источник PropertyListener) в System.Windows.CLRPropertyListener.SourcePropertyChanged (Object отправителя, PropertyChangedEventArgs арг) в System.Windows.Data.WeakPropertyChangedListener.PropertyChangedCallback(Отправитель объекта, аргументы PropertyChangedEventArgs) в RoadCast.Model.BindableType 1.set_Value(Double value) at RoadCast.Default.locationHelper_PositionChangedMinor(Object sender, GeoPositionChangedEventArgs 1 аргументов) в RoadCast.Core.LocationHelper.watcher_PositionChanged (Отправитель объекта, GeoPositionChangedEventArgs`1 e) в System.Device.Location> c.* DisplayClass1.b _0 (Объект _) в System.Reflection.RuntimeMethodInfo.InternalInvoke (RuntimeMethodInfo rtmi, Object obj, BindingFlags invokeAttr, Binder Binder, параметры объекта, культура CultureInfo, логическое значение isBinderDefault, вызывающая сборка, Boolean verifyAccess, StackCrawlMark & ​​stackMark) в System.Reflection.RuntimeMethodInkeFBindInfo.Параметры Object [], CultureInfo culture, StackCrawlMark & ​​stackMark) в System.Reflection.MethodBase.Invoke (Object obj, Object [] параметры)
в System.Delegate.DynamicInvokeOne (Object [] args) в System.MulticastDelegate.DynamicInvokeImpl (Object [] args) в System.Delegate.DynamicInvoke (Object [] args) в System.Windows.Threading.DispatcherOperation.Invoke () в System.Windows.Threading.Dispatcher.Dispatch (приоритет DispatcherPriority) в System.Windows.Threading.Dispatcher.OnInvoke (Контекст объекта) в System.Windows.Hosting.CallbackCookie.Invoke (Объект [] args) в System.Windows.Hosting.DelegateWrapper.InternalInvoke (Object [] args)
в System.Windows.RuntimeHost.ManagedHost.InvokeDelegate (IntPtr pHandle, Int32 nParamCount, ScriptParam [] pParams, ScriptParam & pResult)

ОБНОВЛЕНИЕ: переименование свойства в «InternalValue» исправило это для меня.

1 Ответ

0 голосов
/ 24 декабря 2011

вам нужно инициализировать свой PropertyChanged следующим образом:

  public event PropertyChangedEventHandler PropertyChanged = delegate { };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...