0

Cocoa と Mono を学び始めています。

いくつかのデータ行を入力した NSTableView を作成しました。ここで、いくつかのメソッドをイベント ColumnDidMove、ColumnDidResize、および MouseDownInHeaderOfTableColumn に接続したいと考えています。

しかし、これらのイベントのいずれかにリスナーを追加すると、行を選択したり、列をドラッグしたりすることができなくなります。ただし、列ヘッダーをクリックして並べ替えやサイズ変更を行うことはできます。

どうしたの?

4

1 に答える 1

1

ここでの正確な正しいアプローチが何であるかはわかりませんが、これは役立つかもしれません。

monomac バインディングによって提供されるイベントは、生成されたデリゲートとして「内部」で実装されます。NSTableViewデリゲートは、列の移動やサイズ変更など、 の場合に説明した多くの機能をカプセル化します。

これについては、ここで説明します(モノタッチを指しますが、概念は同じです)。

イベントをサブスクライブすると、デリゲートが内部的に生成された実装に設定され、必要なすべての機能が提供されなくなると思います (これは間違っている可能性があります)。この関連するバグを参照してください。

公開されているすべてのイベントをサブスクライブしてみNSTableViewて、それが役立つかどうかを確認できます。

それ以外の場合は、イベントを使用するのではなく、独自のデリゲートから直接通知を取得するのが最善の方法です。たとえば、次のようになります。

public override void AwakeFromNib()
{
    tableView.Delegate = new MyDelegate();
}

private class MyDelegate : NSTableViewDelegate
{
    public override void ColumnDidMove(NSNotification notification)
    {
         Console.WriteLine("column did move");
    }
}
于 2013-07-15T13:28:35.313 に答える