Проблемы с привязкой mvvmcross на IOS (работает на симуляторе, но некоторые свойства не работают на устройстве)

Проблема заключается в привязке к UIBarButtonItem, на Симуляторе код работает, а на устройстве свойство Enable не работает и Clicked Works…

Та же проблема существует и в textViewItem, но на этот раз ни text, ни enable не работают.

    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-01-11 09:16:56.369 LinkFENACAMSIGEPMobileUIIPad[6496:c07] Навигация: Диагностика: 2.24 Перейдите к MainMenuViewModel с аргументами

2013-01-11 09:16:56.369 СсылкаFENACAMSIGEPMobileUIIPad[6496:c07] TouchNavigation: Диагностика: 2.24 Навигация запрошена

2013-01-11 09:16:56.421 СсылкаFENACAMSIGEPMobileUIIPad[6496:c07] MvxBind: Предупреждение: 2.29 Невозможно выполнить привязку к источнику — null

2013-01-11 09:16:56.423 СсылкаFENACAMSIGEPMobileUIIPad[6496:c07] MvxBind: Предупреждение: 2.29 Невозможно выполнить привязку к источнику имеет значение null

[EDIT 20130111:11:12] - Поведение компоновщика: связывание только сборок SDK

Похоже на: MvvmCross Monotouch - Не удается связать свойства на реальном iPad, но работает на симуляторе (Я не могу заставить это работать...)


person ptorrezao    schedule 11.01.2013    source источник


Ответы (1)


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

Если это работает в симуляторе, но не на устройстве, скорее всего, это связано с компоновщиком - точно так же, как в MvvmCross Monotouch - Не удается связать свойства на реальном iPad, но работает на симуляторе

Чтобы проверить эту теорию, попробуйте включить компоновщик так, чтобы он включал все символы.


Предполагая, что это является причиной проблемы ... тогда, чтобы обойти ее, вам нужно включить файл 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";
    }
}

Примечание: этот код фактически никогда не выполняется, но анализируется компоновщиком во время сборки.

person Stuart    schedule 11.01.2013
comment
Спасибо!!, я заставил компоновщик и изменил параметр ссылки, и это работает! - person ptorrezao; 11.01.2013
comment
Спасибо, Стюарт, что спас меня — даже два года спустя. - person asp_net; 10.03.2015