2014-10-14 3 views
1

MonoMac (System.Windows.Forms.ListView를 대체)로 NSTableView를 사용하는 데 어려움을 겪고 있으며 GetObjectData 메서드가 호출되지 않는 이유에 대해 매우 혼란 스럽습니다. 나는 디버그 프린트를 넣었고, NSTableViewSource의 "GetRowCount"메소드가 제대로 호출되고 있지만 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를 완전히 포기했습니다. 제 목적은 Windows Forms에서 ListView를 복제하는 것이 었습니다. NSView에서 파생 된 자체 사용자 정의 클래스를 작성하여이 작업을 매우 쉽게 수행 할 수있었습니다. 내 자신의 테이블 선을 그려서 텍스트로 채워야했지만, 정말 어려운 점은 없었습니다. XCode 인터페이스 빌더를 사용하면 ScrollView 내부에 사용자 정의보기를 쉽게 배치 할 수 있습니다. 나는 다른 UI에 대해서도 그렇게했다. Mac UI 요소에 원하는 UI 패러다임을 부딪히는 것보다 낫습니다. – Apollo

답변

0

위의 내 의견에 이어 전체 설정을 재 시도하고 오래된 테이블을 삭제하고 새 테이블을 삽입하면 현재 작동합니다. 비록 내가 ObjectValueForTableColumn getObjectValue 대신 사용하고 있습니다. (크레딧 : 앤드류 J. BREHM)

나는 다음과 같은 link @ 제공하는 단계를 사용

+0

NSTableView를 더 이상 사용하지 않기 때문에이 접근법을 확인할 수 없지만 매우 그럴듯하고 효과적이므로 답변으로 받아들입니다. – Apollo

관련 문제