MvvmCross Android Dialog以编程方式绑定

时间:2013-01-17 17:01:17

标签: binding android-dialog mvvmcross

我想在我的MvvmCross项目中使用Android.Dialog(Cross.UI)。我的第一种方法是使用AutoViews。由于此功能还很年轻,另一种方法是在触摸和Droid平台上实现对话框。

现在我只是为Droid做这个,我需要以编程方式将ViewModel的属性绑定到Dialog的元素。

我的视图和ViewModel代码如下:

视图

    public class DialogConfigurationView : MvxBindingDialogActivityView<DialogConfigurationViewModel>
    {
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            DroidResources.Initialise(typeof(Resource.Layout));

            Root = new RootElement()
                {
                    new Section("Private Configuration")
                        {
                            new EntryElement("Name:"),
                            new EntryElement("Description:"),
                            new BooleanElement("Active?")
                        }
                };
        }
    }

视图模型

    public class DialogConfigurationViewModel : MvxViewModel
    {
        public ConfigurationSet Configuration
        {
            get { return _configuration; }
            set
            {
                if (_configuration != value)
                {
                    _configuration = value;
                    RaisePropertyChanged(() => Configuration);
                }
            }
        }
        private ConfigurationSet _configuration;
    }

我的目标是让EntryElement("Name:")与属性ViewModel.Configuration.Name进行双向绑定。

任何人都可以帮我吗?可以这样做吗?

1 个答案:

答案 0 :(得分:2)

我不知道是否有浮动的monodroid.dialog mvvmcross样本不使用自动视图!

然而....绑定的基本语法应该与MonoTouch.Dialog相同 - 例如类似的东西:

                            new Section("Contact Info")
                                {
                                    new StringElement("ID", ViewModel.Customer.ID ?? string.Empty),
                                    new EntryElement("Name", "Name").Bind(this, "{'Value':{'Path':'Customer.Name'}}"),
                                    new EntryElement("Website", "Website").Bind(this, "{'Value':{'Path':'Customer.Website'}}"),
                                    new EntryElement("Primary Phone", "Phone").Bind(this, "{'Value':{'Path':'Customer.PrimaryPhone'}}"),
                                },
                            new Section("Primary Address")
                                {
                                    new EntryElement("Address").Bind(this, "{'Value':{'Path':'Customer.PrimaryAddress.Street1'}}"),
                                    new EntryElement("Address2").Bind(this, "{'Value':{'Path':'Customer.PrimaryAddress.Street2'}}"),
                                    new EntryElement("City").Bind(this, "{'Value':{'Path':'Customer.PrimaryAddress.City'}}"),
                                    new EntryElement("State").Bind(this, "{'Value':{'Path':'Customer.PrimaryAddress.State'}}"),
                                    new EntryElement("Zip").Bind(this, "{'Value':{'Path':'Customer.PrimaryAddress.Zip'}}"),
                                },

来自https://github.com/slodge/MvvmCross/blob/vnext/Sample%20-%20CustomerManagement/CustomerManagement/CustomerManagement.Touch/Views/BaseCustomerEditView.cs


请注意,在MonoTouch和MonoDroid的MvvmCross绑定中,默认情况下,文本编辑框等内容的默认绑定通常为TwoWay


如果您确实要运行样品,请随时将其发布到要点或回购 - 或者发布博客 - 看起来我们可以使用一些样品来处理!