我想在我的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
进行双向绑定。
任何人都可以帮我吗?可以这样做吗?
答案 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'}}"),
},
请注意,在MonoTouch和MonoDroid的MvvmCross绑定中,默认情况下,文本编辑框等内容的默认绑定通常为TwoWay
。
如果您确实要运行样品,请随时将其发布到要点或回购 - 或者发布博客 - 看起来我们可以使用一些样品来处理!