MonoTouch.Dialog cannot get the values on textfields

1k Views Asked by At

I have the following code

public partial class AppDelegate : UIApplicationDelegate
    {
        UINavigationController _navigationController = new UINavigationController();

        public enum PrivacySetting { always, never, friends };

        LogInViewModel _login;

        // This method is invoked when the application has loaded its UI and its ready to run
        public override bool FinishedLaunching (UIApplication app, NSDictionary options)
        {
            // If you have defined a view, add it here:
            // window.AddSubview (navigationController.View);

            _login = new LogInViewModel
            {
                Privacy = PrivacySetting.always
            };

            var _loginbindingcontext = new BindingContext(this, _login, "Login");
            var dialogcontroller = new DialogViewController(_loginbindingcontext.Root);

            _navigationController.PushViewController(dialogcontroller, true);

            window.AddSubview(_navigationController.View);

            window.MakeKeyAndVisible ();

            return true;
        }

        // This method is required in iPhoneOS 3.0
        public override void OnActivated (UIApplication application)
        {
        }

        public class LogInViewModel
        {

            [Section("Credentials")]

            [Entry("Username")]
            public string login;

            [Caption("Password"), Password("Password")]
            public string password;

            [Section("Privacy")]

            [Caption("Show Name")]
            public PrivacySetting Privacy;

            [Section ("Tap to Console")]
            [OnTap ("tapme")]
            public string TapMe;
        }

        public void tapme()
        {
            Console.WriteLine(_login.login);    
        }
    }

i run the application then i fill in the textfields but when i tap on TapMe i get a null value, so how can i retrieve values on textfields using monotouch.dialog?

2

There are 2 best solutions below

0
On BEST ANSWER

You need to first call Fetch() on the binding context, like this:

public void tapme()
{
            _loginbindingcontext.Fetch();
            Console.WriteLine(_login.login);    
}
2
On
_loginbindingcontext.Fetch();

This will populate the LogInViewModel with the values from the Elements in the DialogViewController.

You will need to keep a reference in your ViewModel for the BindingContext so that you can call Fetch().

Alternatively, you can check out my project on GitHub MonoTouch.MVVM which makes these kinds of things easier. Its not done yet and its only a proof of concept but I am actively working on it. https://github.com/RobertKozak/MonoTouch.MVVM