0

Winows Phone 7.1 用の MVC アプリを作成する際に、参考として MSDN チュートリアルに従っています: http://msdn.microsoft.com/en-us/library/hh286405(v=vs.92).aspx

私のアプリでは、実装された INotifyPropertyChanging および INotifyPropertyChanged インターフェイスと次のようなプロパティを実装するテーブルにオブジェクトがあります。

private DateTime lastViewDate;
[Column]
public DateTime LastViewDate
{
    get { return lastViewDate; }
    set
    {
       if (lastViewDate != value)
       {
           NotifyPropertyChanging("LastViewDate");
           lastViewDate = value;
           NotifyPropertyChanged("LastViewDate");
       }
    }
}

LastViewDate プロパティが変更されると、NotifyPropertyChanging が呼び出されると、プロパティが明らかにそこにあるにもかかわらず、MissingMethodException がスローされます。それで、私は何を間違っていますか?(私はwp7プログラミングの初心者なので、明らかかもしれませんが、私にはわかりません)

編集:詳細

メソッドを調べるための呼び出しがいくつか追加されたインターフェイス メソッドを次に示します。

    // Used to notify that a property is about to change
    private void NotifyPropertyChanging(string propertyName)
    {
        var type = this.GetType();
        var method = type.GetMethod(propertyName); // null
        var getMethod = type.GetMethod("get_" + propertyName); // works
        var setMethod = type.GetMethod("set_" + propertyName); // works
        var methods = type.GetMethods(); // set_LastViewDate is in the method list
        //
        if (PropertyChanging != null)
        {
            PropertyChanging(this, new PropertyChangingEventArgs(propertyName));
        }
    }

NotifyPropertyChanging("set_LastViewDate"); への呼び出しを変更します。それでも同じ例外が発生します。(そして、「メソッド」はデバッグ型チェックで null になります)

編集:

スタックトレース:

System.MissingMethodException was unhandled
Message=MissingMethodException
StackTrace:
   at System.Activator.InternalCreateInstance(Type type, Boolean nonPublic, StackCrawlMark& stackMark)
   at System.Activator.CreateInstance(Type type)
   at System.Data.Linq.WorkAround.ActivationHelper.CreateInstance(Type type)
   at System.Data.Linq.ChangeTracker.StandardChangeTracker.StandardTrackedObject.CreateDataCopy(Object instance)
   at System.Data.Linq.ChangeTracker.StandardChangeTracker.StandardTrackedObject.StartTracking()
   at System.Data.Linq.ChangeTracker.StandardChangeTracker.OnPropertyChanging(Object sender, PropertyChangingEventArgs args)
   at WindowsPhonePlaces.Photo.NotifyPropertyChanging(String propertyName)
   at WindowsPhonePlaces.Photo.set_LastViewDate(DateTime value)
   at WindowsPhonePlaces.Photo.ResetViewDate()
   at WindowsPhonePlaces.PhotoViewerPage.OnNavigatedTo(NavigationEventArgs e)
   at Microsoft.Phone.Controls.PhoneApplicationPage.InternalOnNavigatedTo(NavigationEventArgs e)
   at System.Windows.Navigation.NavigationService.RaiseNavigated(Object content, Uri uri, NavigationMode mode, Boolean isNavigationInitiator, PhoneApplicationPage existingContentPage, PhoneApplicationPage newContentPage)
   at System.Windows.Navigation.NavigationService.CompleteNavigation(DependencyObject content, NavigationMode mode)
   at System.Windows.Navigation.NavigationService.ContentLoader_BeginLoad_Callback(IAsyncResult result)
   at System.Windows.Navigation.PageResourceContentLoader.BeginLoad_OnUIThread(AsyncCallback userCallback, PageResourceContentLoaderAsyncResult result)
   at System.Windows.Navigation.PageResourceContentLoader.<>c__DisplayClass4.<BeginLoad>b__0(Object args)
   at System.Reflection.RuntimeMethodInfo.InternalInvoke(RuntimeMethodInfo rtmi, Object obj, BindingFlags invokeAttr, Binder binder, Object parameters, CultureInfo culture, Boolean isBinderDefault, Assembly caller, Boolean verifyAccess, StackCrawlMark& stackMark)
   at System.Reflection.RuntimeMethodInfo.InternalInvoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, StackCrawlMark& stackMark)
   at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
   at 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 priority)
   at System.Windows.Threading.Dispatcher.OnInvoke(Object context)
   at System.Windows.Hosting.CallbackCookie.Invoke(Object[] args)
   at System.Windows.Hosting.DelegateWrapper.InternalInvoke(Object[] args)
   at System.Windows.RuntimeHost.ManagedHost.InvokeDelegate(IntPtr pHandle, Int32 nParamCount, ScriptParam[] pParams, ScriptParam& pResult)
4

2 に答える 2

1

私はそれを明確にするためにここに別の答えとして解決策を置いています:

問題は、コンストラクターをプライベートにし、静的メソッドを使用してdbオブジェクトを作成したことです。これはLINQでは機能しません。パラメーターのないパブリックコンストラクターが必要です。

それを理解してくれた@MetroSmurfと@RajeevNairに感謝します。

于 2012-04-30T19:59:55.507 に答える
0

PropertyChanging公開宣言されていますか?そうでない場合は、パブリックとして設定する必要があります。

于 2012-04-30T02:31:08.297 に答える