2011-02-18 2 views
2

일부 숫자 값에 대해 편집 할 수없는 데이터 표시로 모노 터치 대화 상자를 사용하고 싶습니다. DialogViewController.ReloadData를 호출해도 바인드 된 객체의 데이터는 업데이트되지 않습니다.Monotouch-Dialog ReloadData가 데이터를 다시로드하지 않습니까?


class AccountFormModel 
{ 
     [Section("Account data", "")] 

     [Caption("Balance")] 
     public string balance; 
} 
... 
private void InitComponents() 
{ 
      accountFormModel = new AccountFormModel(); 
      accountFormModel.balance = "TestTestTest"; 
      bc = new BindingContext(this, accountFormModel, "AccountData"); 
      dialogViewController = new DialogViewController(bc.Root); 
      dialogViewController.Autorotate = true; 
} 

private void RefreshData() 
{ 
      string b = SomeDatasource.Account.Balance.ToString("N4"); 
      accountFormModel.balance = "$" + b; 
      dialogViewController.ReloadData(); 
} 

디버깅 refreshData 방법에서 accountFormModel.balance가 오른쪽 값으로 설정되는 것을 알 수 있지만, 아무것도 시뮬레이터 형태에 변화 없음 (TestTestTest을 유지). 내가 뭘 잘못하고있어?

답변

3

DialogViewController는 리플렉션을 사용할 때 처음에는 바인딩을 한 번 수행하며, FetchData()가 클래스로 다시 전송 된 데이터 인 경우에만 수행합니다.

BindingContext는 기본적으로이 시점에서 데이터 복사본을 만드는 데이터 (이 경우 잔액)에서 모델을 만듭니다. ReloadData()를 호출하면 사본에서 데이터가 다시로드되므로 변경 사항이 표시되지 않습니다. 데이터를 다시 채우기 위해 BindingContext에 일부 메서드를 포함하도록 변경할 수는 있지만 현재로서는 그렇지 않습니다.

MonoTouch.Dialog 용 Reflection API는 매우 제한되어 있으므로 Element API를 사용하는 것이 중요합니다. MonoTouch.Dialog의 샘플 대부분은 해당 API를 사용합니다. 대화 상자를 완벽하게 제어 할 수 있습니다.

+0

헤이 Miguel, 그래서 내가 큰 스크롤 가능한 목록을 만들려고 노력하고있는 개체의 lage 목록 (약 1000)이 있다면, 아마도 Dialog가 가장 적합한 도구가 아닌 것입니까? 나는 SyleStringElement를 광범위하게 사용하고 있으며, Root.Add (mySection)에 대한 호출이 완료된 후에도 UITableView (3GS 장치에서)를 렌더링하는 데 3-4 초 정도 걸린다. Dialog를 사용하지 않고 GetCell을 쉽게 오버라이드하여 동일한 작업을 수행 할 수 있습니다. Dialog가 Elements API를 사용하여 큰 목록을 렌더링하는 데 적합하지 않다는 것을 해석하면 올바르게 대답을 이해하고 있습니까? – NovaJoe

+0

사용자가 양식에 대해 "취소"를 선택하면 다시로드 할 데이터가 필요합니다. – tofutim

+0

신경 쓰지 마라. 나는 내가 잘못하고있는 것을 발견했다. 루트 요소를 작성한 다음 섹션을 추가했습니다. 섹션과 모든 요소는 LINQ select에 의해 만들어지는 자식 요소이지만 루트 요소는 만들어지지 않습니다. 루트 요소 생성이 LINQ select에 포함되면 전체 작업이 매우 빠릅니다. ... MonoTouch.Dialog 프로젝트 페이지 예제의 Miguel 예제와 같습니다. >. < – NovaJoe

관련 문제