我正在尝试为传递到UIViewElement的MvxView设置数据绑定代码,使用此Github Example Code作为基础
我有这个元素 -
public class WGMvxViewElement : UIViewElement, IBindableElement
{
public IMvxBindingContext BindingContext { get; set; }
public WGMvxViewElement(string caption, MvxView view, bool transparent)
: base(caption, view, transparent)
{
this.CreateBindingContext();
// Bind our DataContext to the DataContext of the supplied MvxView
this.DelayBind(() => {
view.DataContext = DataContext;
});
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
BindingContext.ClearAllBindings();
}
base.Dispose(disposing);
}
public virtual object DataContext
{
get { return BindingContext.DataContext; }
set { BindingContext.DataContext = value; }
}
}
DelayBind中的当前代码是否会导致任何内存泄漏或问题?
我最初尝试使用Databinding来执行此操作而不是显式设置,但无法使语法工作/导致错误/循环
this.DelayBind(() => {
this.CreateBinding().For(mvxve => mvxve.DataContext).To<SettingsProfileView>(v => v.DataContext).Apply();
// think that was in reverse, so try?
view.CreateBinding().For(v => v.DataContext).To<WGMvxViewElement>(ve => ve.DataContext);
任何人都可以纠正我,如果这是错误的或有适当的绑定代码,所以它的绑定一直下来?
然后我在对话框中执行此操作 -
public class SettingsView : MvxDialogViewController
{
SettingsViewModel MyViewModel { get { return ViewModel as SettingsViewModel; } }
public SettingsView() : base(UITableViewStyle.Plain, null, true)
{
MvxInlineBindingTarget<SettingsViewModel> bindings = this.CreateInlineBindingTarget<SettingsViewModel>();
Root = new RootElement("Settings")
{
new Section("Section") {
new WGMvxViewElement("", new SettingsProfileView(), true).Bind(bindings, el => el.DataContext, vm => vm),
...
然后,提供给WGMvxViewElement的视图将在其ctor中使用此类DataContext -
public SettingsProfileView ()
{
... profileUIImageView + View set up somehow
this.DelayBind (() => {
var set = this.CreateBindingSet<SettingsProfileView, SettingsViewModel>();
set.Bind(profileUIImageView.Tap()).For(tap => tap.Command).To(vm => vm.ChooseProfileCommand);
set.Apply();
});
}
在撰写这个问题时,代码似乎运作正常,但是有经验的用户可以看到任何缺点或改进,比如我错过了某个地方。