2013-01-11 64 views
3

問題在於綁定到UIBarButtonItem,代碼在模擬器上工作,但在設備上的屬性Enable doesn' t工作和點擊工作...IOS上的mvvmcross綁定問題(適用於模擬器,但某些屬性在設備上不起作用)

textViewItem中存在相同的問題,但這次既不是文本或啓用工程。

public partial class ProcessDetailViewController : MvxBindingTouchViewController<ProcessDetailViewModel> 
{ 
    public ProcessDetailViewController (MvxShowViewModelRequest request) 
     : base (request,"ProcessDetailViewController", null) 
    { 
    } 

    public override void DidReceiveMemoryWarning() 
    { 
     // Releases the view if it doesn't have a superview. 
     base.DidReceiveMemoryWarning(); 

     // Release any cached data, images, etc that aren't in use. 
    } 

    public override void ViewDidLoad() 
    { 
     base.ViewDidLoad(); 
     this.AddBindings(
      new Dictionary<object, string>() 
      { 
      { this.lblSeguradoraNome , "{'Text':{'Path':'AssuranceCompanyID'}}" }, 
      { this.lblSeguradoraGestor , "{'Text':{'Path':'AssuranceManager'}}" }, 
      { this.lblApoliceData , "{'Text':{'Path':'InsurancePolicyStartDate'}}" }, 
      { this.lblApoliceNum , "{'Text':{'Path':'InsurancePolicyNumber'}}" }, 
      { this.lblApoliceRamo , "{'Text':{'Path':'InsurancePolicyBranch'}}" }, 
      { this.lblDataPedido , "{'Text':{'Path':'RequestDate'}}" }, 
      { this.lblGestor , "{'Text':{'Path':'InternalManager'}}" }, 
      { this.lblLocalRiscoCodPostal , "{'Text':{'Path':'InsurancedLocationAddressCityZipCode'}}" }, 
      { this.lblLocalRiscoConcelho , "{'Text':{'Path':'InsurancedLocationAddressCity'}}" }, 
      { this.lblLocalRiscoMorada , "{'Text':{'Path':'InsurancedLocationAddress'}}" }, 
      { this.lblPerito , "{'Text':{'Path':'Surveyer'}}" }, 
      { this.lblSeguradoCodPostal , "{'Text':{'Path':'InsuredPersonAddressCityZipCode'}}" }, 
      { this.lblSeguradoConcelho , "{'Text':{'Path':'InsuredPersonAddressCity'}}" }, 
      { this.lblSeguradoContacto , "{'Text':{'Path':'InsuredPersonPhone'}}" }, 
      { this.lblSeguradoMorada , "{'Text':{'Path':'InsuredPersonAddress'}}" }, 
      { this.lblSeguradoNome , "{'Text':{'Path':'InsuredPersonName'}}" }, 
      { this.btnDownload , "{'Clicked':{'Path':'DownloadProcessButton'},'Enabled':{'Path':'HideIfDownloaded'}}" }, 
      { this.btnTerminarVisita , "{'Clicked':{'Path':'EndVisitButton'},'Enabled':{'Path':'ShowIfOnVisit'}}" }, 
      { this.btnObterLocalizacao , "{'Clicked':{'Path':'AdquireLocationButton'},'Enabled':{'Path':'ShowIfOnVisit'}}" }, 
      { this.btnIniciarVisita , "{'Clicked':{'Path':'BeginVisitButton'},'Enabled':{'Path':'HideIfOnVisit'}}" }, 
      { this.btnTirarFoto , "{'Clicked':{'Path':'TakePhotoButton'},'Enabled':{'Path':'ShowIfOnVisit'}}" }, 
      { this.btnVoltar , "{'Clicked':{'Path':'ReturnButton'}}" }, 
      { this.btnUpload , "{'Clicked':{'Path':'UploadProcessButton'},'Enabled':{'Path':'CanUpload'}}" }, 
      } 
     ); 
    // var a= NavigationItem.LeftBarButtonItems[0].Enabled 

     // Perform any additional setup after loading the view, typically from a nib. 
    } 

    public override void ViewDidUnload() 
    { 
     base.ViewDidUnload(); 

     // Clear any references to subviews of the main view in order to 
     // allow the Garbage Collector to collect them sooner. 
     // 
     // e.g. myOutlet.Dispose(); myOutlet = null; 

     ReleaseDesignerOutlets(); 
    } 

    public override bool ShouldAutorotateToInterfaceOrientation (UIInterfaceOrientation toInterfaceOrientation) 
    { 
     // Return true for supported orientations 
     return true; 
    } 
} 

public class ProcessDetailViewModel : ProcessNavigationBaseViewModel 
{(...)} 

public class ProcessNavigationBaseViewModel : BaseViewModel 
{ 
    (...) 

    #region Properties 
    private Process _currentProcess; 

    private static User _user; 

    private bool _isGPSLocationStarted; 

    private double _latitude; 

    private double _longitude; 

    private string _photoFilename = ""; 

    public Process CurrentProcess 
    { 
     get 
     { 
      return _currentProcess; 
     } 
     set 
     { 
      _currentProcess = value; 
      FirePropertyChanged(() => CurrentProcess); 
     } 
    } 

    public User User 
    { 
     get { return _user; } 
     set 
     { 
      _user = value; 
      FirePropertyChanged(() => User); 
     } 
    } 

    private bool _isDownloaded 
    { 
     get 
     { 
      return CurrentProcess.IsLockedInServer && !(CurrentProcess.ProcessState == ProcessState.WaitingReportProduction.ToString()); 
     } 
     set 
     { 
      CurrentProcess.IsLockedInServer = value; 
      FirePropertyChanged(() => ShowIfDownloaded); 
      FirePropertyChanged(() => HideIfDownloaded); 
     } 
    } 

    public bool ShowIfDownloaded 
    { 
     get { return _isDownloaded; } 
    } 

    public bool HideIfDownloaded 
    { 
     get { return !_isDownloaded; } 
    } 

    public bool CanUpload 
    { 
     get { return (CurrentProcess.ProcessState == ProcessState.WaitingUpload.ToString()); } 
    } 

    public bool CanDownload 
    { 
     get { return (CurrentProcess.ProcessState != ProcessState.WaitingReportProduction.ToString() && 
            CurrentProcess.ProcessState == ProcessState.WaitingSurveyorAcceptionDecision.ToString()) ; } 
    } 

    public bool ShowIfOnVisit 
    { 
     get { return (CurrentProcess.ProcessState == ProcessState.OnVisist.ToString()); } 
    } 

    public bool HideIfOnVisit 
    { 
     get { return (!(CurrentProcess.ProcessState == ProcessState.OnVisist.ToString())) && ShowIfDownloaded; } 
    } 

    public string ProcessDescription 
    { 
     get 
     { 
      return string.Format("{0} - {1}", CurrentProcess.ProcessNumber, CurrentProcess.RequestedService.RequestedServiceType); 
     } 
    } 
(...) 
} 

預先感謝

[編輯]

應用輸出: 2013年1月11日09:16:56.369 LinkFENACAMSIGEPMobileUIIPad [6496:C07] 導航:診斷:16:56.369 LinkFENACAMSIGEPMobileUIIPad 2.24導航與ARGS

2013年1月11日09〜MainMenuViewModel [6496:C07] TouchNavigation :診斷:2.24導航請求

2013年1月11日09:16:56.421 LinkFENACAMSIGEPMobileUIIPad [6496:C07] MvxBind:警告:2.29無法綁定到源是空

2013年1月11日09: 16:56.423 LinkFENACAMSIGEPMobileUIIPad [6496:c07] MvxBind:警告:2.29無法綁定到源爲空

[編輯20130111:11:12] - 鏈接器行爲:鏈接SDK組件僅

類同: MvvmCross Monotouch - Fail to bind Properties on a real iPad, but it works on the Simulator(我不能做這項工作...)

回答

7

我可以」 t包含示例代碼中看到的barbutton - 所以我會根據文本,點擊,啓用等回答。

如果這是在模擬器中工作,但不是在設備上,可能是這樣做與連接器 - 完全一樣在MvvmCross Monotouch - Fail to bind Properties on a real iPad, but it works on the Simulator

爲了驗證這一理論,嘗試打開鏈接到包括所有的符號


假設這是問題的原因......然後要解決它,你需要包括LinkerPleaseInclude.cs文件,該文件會欺騙鏈接器包含這些屬性。

例如,它可能只是看起來像:

public class LinkerIncludePlease 
{ 
    private void IncludeClicked(UIButton button) 
    { 
     button.Clicked += (s, e) => { }; 
    } 

    private void IncludeEnabled(UIButton button) 
    { 
     button.Enabled = !button.Enabled; 
    } 

    private void IncludeText(UILabel label) 
    { 
     label.Text = label.Text + "test"; 
    } 
} 

注:此代碼是從來沒有實際執行,而是由鏈接器在生成時分析。

+0

**謝謝!! **,我強制鏈接器並更改鏈接選項,它的工作原理! – ptorrezao

+0

謝謝斯圖爾特,那是爲了挽救我的一天 - 甚至兩年後。 –

相關問題