Issues with mvvmcross Binding on iOS (works on Simulator, but some properties do not work on the device)

The problem is binding to UIBarButtonItem, the code works on Simulator, but the Enable property does not work on the device, and Clicked Works ...

The same problem exists in textViewItem, but this time neither text nor action works.

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. // // eg 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); } } (...) } 

Thanks in advance

[EDIT]

Application exit: 2013-01-11 09: 16: 56.369 LinkFENACAMSIGEPMobileUIIPad [6496: c07] Navigation: Diagnostics: 2.24 Go to MainMenuViewModel using args

2013-01-11 09: 16: 56.369 LinkFENACAMSIGEPMobileUIIPad [6496: c07] TouchNavigation: Diagnostics: 2.24 Navigating as requested

2013-01-11 09: 16: 56.421 LinkFENACAMSIGEPMobileUIIPad [6496: c07] MvxBind: Warning: 2.29 Unable to bind null to source

2013-01-11 09: 16: 56.423 LinkFENACAMSIGEPMobileUIIPad [6496: c07] MvxBind: Warning: 2.29 Unable to bind null to source

[EDIT 20130111: 11: 12] - Linker Behavior: SDK Link Assemblies Only

Sidigle: MvvmCross Monotouch - Unable to bind properties on real iPad, but it works on Simulator (I can't do this job ...)

+3
source share
1 answer

I do not see the barbuton in the above code example, so I will answer based on text, clicks, allowed, etc.

If this works in the Simulator but not on the device, it is most likely connected to Linker - just like in MvvmCross Monotouch - It is impossible to link properties on a real iPad, but it works on Simulator

To test this theory, try turning on the linker to include all characters


Assuming this is the cause of the problem ... then, in a workaround, you need to include the LinkerPleaseInclude.cs file, which will trick Linker into enabling these properties.

For example, it might look like this:

 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"; } } 

Please note: this code is never executed, but parsed by the linker at build time.

+7
source

All Articles