3

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

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

我的 View 和 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

谁能帮我这个?这可以做到吗?

4

1 回答 1

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是默认的。


如果您确实运行了一个示例,那么请随时将其发布到 gist 或 repo - 或发布有关它的博客 - 看起来我们可以使用一些示例来工作!

于 2013-01-17T18:21:49.523 回答