2011-12-14 4 views
-1

IEditableObject.EndEditで例外がスローされた場合(バインディングを使用してWPF Datagridから設定された場合)FrameworkがIEditableObject.EndEditで例外をキャッチします

フレームワークによって例外がキャッチされ、このメッセージがコンソールに表示されます。 "最初の例外は、 'System.NullReferenceException'型の例外です。

DispatcherUnhandledExceptionとAppDomain.CurrentDomain.UnhandledExceptionを使用して未処理の例外をすべて "処理"するので、実際にこの例外がより明白になります。どこで例外を記録し、アプリを閉じる前にユーザーに通知しますか。

各EndEditにtry-catchを追加し、Application.Dispatcherを使用して例外を再現するような何らかのハッキングを使用する必要がありますか?ここで

+0

あなたは 'DataGrid.ItemSource'に何をバインドしていますか? –

答えて

0

は、私はこのquestionを参照してくださいPreserveStackTraceについて

public class Editable : NotificationObject, IEditableObject 
{ 
... 
    public void EndEdit() 
    { 
      try 
      { 
       ... 
      } 
      catch (Exception e) 
      { 
       ExceptionUtils.ThrowOnUIThread(e); 
      } 
     } 
    } 
} 


public static class ExceptionUtils 
{ 
    public static void ThrowOnUIThread(Exception exception) 
    { 
     exception.PreserveStackTrace(); 
     Application.Current.Dispatcher.BeginInvoke(new Action(() => { throw exception; })); 
    } 
} 

をやってしまったものです。