2014-10-14 4 views
1

Я пытаюсь заставить NSTableView работать в MonoMac (в качестве замены System.Windows.Forms.ListView), и я очень озадачен тем, почему мой метод GetObjectData не вызывается. Я поместил отладочные отпечатки, и метод GetRowCount в моем NSTableViewSource вызывается правильно, но он никогда не попадает в GetObjectData. Я получаю таблицу с нужным количеством строк, даже отбор, но в строках нет данных. ReloadData также работает, потому что есть еще один вызов GetRowCount.MonoMac TableView не вызывает GetObjectData

Вот код:

public class MyTableViewSource : NSTableViewSource 
{ 
    //... (constructor, etc.) 

    public override int GetRowCount(NSTableView table) 
    { 
     Debug.Print ("NumberOfRowsInTableView = {0}", mSFList.RowCount); 
     return mSFList.RowCount; 
    } 

    // TODO: Why is this not being called!!! 
    public override NSObject GetObjectValue(NSTableView table, NSTableColumn col, int row) 
    { 
     Debug.Print ("Getting data for row {0}, column titled {1}", row, col.HeaderCell.Title); 
     // Get the column index. 
     int colIndex; 
     NSTableColumn[] cols = table.TableColumns(); 
     for (colIndex = 0; colIndex < cols.Length; colIndex++) 
      if (cols[colIndex] == col) break; 
     if (colIndex >= cols.Length) return null; 
     return new NSString(mSFList[row,colIndex]); 
    } 

Я даже пытался принуждая вещи с этим экспорт, но я не знаю, если у меня есть строка правильно.

[Export("tableView:getObjectValue:forTableColumn:row:")] 
    public NSObject MyGetObjectValue(NSTableView table, NSTableColumn col, int row) 
    { 
     return GetObjectValue(table, col, row); 
    } 

Выход отладки всегда очень последовательны:

NumberOfRowsInTableView = 2 

Любые идеи? Интересно, сделал ли я все правильно со стороны XCode, но не столкнулся с таблицей, я не вижу, как я мог заблокировать этот метод.

Xamarin Studio 5.5, но я сохраняю Mono версии 3.8.0 на данный момент (у 3.10 есть проблемы с некоторыми кодами Windows, которые я использую).

+0

(И да, у меня есть несколько столбцов - 3 - и я также получить ответ, когда я нажимаю на одном из колонки заголовки, «DidClickTableColumn».) – Apollo

+0

Вы когда-нибудь это делали, я застрял в той же проблеме – ClaraU

+0

Я фактически полностью отказался от TableView. Моя цель состояла в том, чтобы приблизительно скопировать ListView из Windows Forms, и я смог сделать это довольно легко, создав собственный собственный класс, полученный из NSView. Мне пришлось рисовать собственные таблицы и заполнять их текстом, но в этом нет ничего сложного, а построитель интерфейса XCode упрощает установку пользовательского представления внутри ScrollView. Я тоже сделал это для некоторых других моих пользовательских интерфейсов; кажется, лучше подходит, чем пытаться обуздать мои желательные парадигмы интерфейса в элементы Mac UI. – Apollo

ответ

0

Следуя моему замечанию выше, я повторил всю установку, удалил старые таблицы и вставил новые, и теперь это работает. Хотя я использую ObjectValueForTableColumn, а не getObjectValue.

Я использовал шаги, приведенные @ следующие link (Credits: Andrew J. Брем)

+0

Я не могу проверить этот подход, потому что я больше не использую NSTableView, но он очень правдоподобен и работает на вас, поэтому я принимаю его как ответ. – Apollo

 Смежные вопросы

  • Нет связанных вопросов^_^