2017-05-12 9 views
0

ドラッグアンドドロップ機能が必要なプロジェクトを現在作業中です。WPF:ビューモデルの内部クラスのブレークポイントを打つことができません

解決策を簡略化するために、GongSolutions.DragDropナゲットパッケージを使用しています。ライブラリを使用すると、xamlの "dd:DragDrop.DropHandler"属性を、IDropTargetインターフェイスを実装するクラスにバインドできます。

私のビューモデル内でこれを実装する内部クラスを作成し、そのようにバインドしていますが、機能は動作しますが、何らかの理由でこの内部クラス内のブレークポイントにヒットできません。私はビューモデル自体を継承していたときにすべてのブレークポイントにヒットできましたが、インナークラスを実装することにしました。

次は、多くのコードがあるとして簡単にするために取り外さ詳細とコードで、ブレークポイントがMainViewModel内部の作業ができますが、ModuleItemsListDropHandler以内にブレークポイントを設定するときには、すべての

public class MainViewModel 
{ 
    ObservableCollection<ModuleItem> _moduleItems; 
    public ObservableCollection<ModuleItem> ModuleItems 
    { 
     get { return _moduleItems; } 
    } 

    ObservableCollection<ModuleItem> _moduleTiles; 
    public ObservableCollection<ModuleItem> ModuleTiles 
    { 
     get { return _moduleTiles; } 
    } 

    //breakpoints work within this method 
    public void addToList(MouseEventArgs e) 
    { 
     //removed for simplicity 

    } 

    public MainViewModel() 
    { 
     //removed for simplicity 

    } 



    //Class that will not let me hit breakpoints that are set 
    class ModuleItemsListDropHandler : IDropTarget 
    { 

     void IDropTarget.DragOver(IDropInfo dropInfo) 
     { 
      //functionality during drag over 
     } 

     void IDropTarget.Drop(IDropInfo dropInfo) 
     { 
       //functionality for drop 
     } 


    } 
} 

にブレークポイントにヒットしません。私は現在VS 2015のコミュニティ版を使用しています

+0

[この記事をお読みください。](https://stackoverflow.com/help/mcve)おそらくブレークポイントを設定しているメソッドは呼び出されません。どのようにXAMLの何かをModuleItemsListDropHandlerのインスタンスにバインドしていますか?それはプライベートクラスです。 'ModuleItems'と' ModuleTiles'プロパティを含めたのは注目に値しますが、あまりにも除外されていることは明らかです。 –

+0

ありがとう、私はそれがプライベートクラスであることを知らなかった、デフォルトのドロップハンドラは私とほとんど同じですので、エラーを気付かないのは難しいです。私はクラスのインスタンスを保持するプロパティを作成して終了しました。それは公開されていてもクラスへのバインディングを許可していなかったからです。答えとして投稿すると最高のものとして選択します – BossmanT

+0

恐ろしいそれは簡単でした。 –

答えて

1

デバッガではうまく動作しないクラスはありません。最良の方法は、メソッドが実際に呼び出されていないことです。 System.Diagnostics.Trace.WriteLine()またはMessageBox.Show()への急いで電話することで、大きな問題なくその質問に答えることができます。

ただし、これは本当にドロップハンドラクラスがどのように定義されていますか?

public class MainViewModel 
{ 
    ... 

    class ModuleItemsListDropHandler : IDropTarget 
    { 

これはプライベートクラスなので、そのインスタンスをXAML内のどのようにバインドしているのだろうと思います。たとえば、その戻り値の型で非プライベートプロパティを宣言することはできません。 となります。IDropTargetまたはObjectと返すことができます。

ちなみに、クラス(または名前空間に直接定義されているもの)は、通常internalのデフォルトではprivateではなくアクセスされますが、クラスメンバーのように子クラスはデフォルトでprivateになります。

関連する問題