Data binding 如何绑定UITableViewCell';视图模型ICommand的子视图事件?

Data binding 如何绑定UITableViewCell';视图模型ICommand的子视图事件?,data-binding,xamarin.ios,mvvmcross,monotouch.dialog,Data Binding,Xamarin.ios,Mvvmcross,Monotouch.dialog,我有一个视图,它使用几个MonoTouch.Dialog元素作为屏幕控件。我已经能够为所有屏幕控件创建流畅的绑定,除了一个ButtonElement,因为我无法访问其UIButton子视图的TouchUpInside事件 下面是创建控件、构建屏幕和创建绑定的伪代码 // Controls created CheckboxElement checkbox = new CheckboxElement("Lorem ipsum dolor"); StringElement string1 = new

我有一个视图,它使用几个MonoTouch.Dialog元素作为屏幕控件。我已经能够为所有屏幕控件创建流畅的绑定,除了一个ButtonElement,因为我无法访问其UIButton子视图的TouchUpInside事件

下面是创建控件、构建屏幕和创建绑定的伪代码

// Controls created
CheckboxElement checkbox = new CheckboxElement("Lorem ipsum dolor");
StringElement string1 = new StringElement("Sit amet");
StringElement string2 = new StringElement("Consectetur");
ButtonElement button = new ButtonElement("Adipiscing", delegate{method();});

// Elements used to create view
List<Element> elements = new List<Element>(){checkbox, string1, string2, button};
AddElements(elements);

// Bind controls to view model properties
var set = this.CreateBindingSet<SettingsView, SettingsViewModel>();

set.Bind(checkbox).For(v => v.BooleanValue).To(vm => vm.CheckboxProperty).TwoWay();
set.Bind(string1).For(v => v.Value).To(vm => vm.String1Property);
set.Bind(string2).For(v => v.Value).To(vm => vm.String2Property);
// Binding to ButtonElement TouchUpInside event would go here

set.Apply();
现在在ButtonElement中,当UIButton在GetCell中创建时,其TouchUpInside事件链接到匿名委托方法,该方法作为ButtonElement构造函数的一部分传入,并存储在名为Tapped的NSAction中

button.TouchUpInside += (o, e) => Tapped.Invoke();
为了删除此事件处理,我创建了一个名为ButtonElementMvx的新类,该类继承自ButtonElement。在ButtonnelementMVX的GetCell方法中,我删除了由其父级设置的事件处理

public ButtonElementMvx : ButtonElement
{
    ...

    public override UITableViewCell GetCell(UITableView tv)
    {
        UITableViewCell cell = base.GetCell(tv);
        button.TouchUpInside -= ButtonTouchUpInsideEventHandler;
        return cell;
    }
}
ButtonTouchInsideEventHandler是对ButtonElement的GetCell中创建的匿名委托方法的引用(我知道这个实现可能有点麻烦,但我稍后会清理它)

这里是我的问题-在我创建其他绑定的视图中,创建ButtonElement的UIButton TouchUpInside事件的绑定的最佳方法是什么

buttonElement : ButtonElement
    |
    -> uiButton : UIButton
        |
        -> TouchUpInside
类似于

set.Bind(buttonElement.uiButton).For("TouchUpInside").To(vm => vm.TouchUpInsideCommand);
我已经做了一些研究,我认为未来的方向是创建一个自定义绑定,在启动时添加到注册表中(在Stuart的视频中概述),并扩展ButtonElementMvx类,以便我可以访问按钮的TouchUpInside事件,并将其与其他控件一起绑定到我的视图中


有什么想法吗?这是正确的继续方式还是我走错了方向?

你能发布整个
按钮元素或链接吗?你使用的是Mvx的Dialog副本还是Xamarin原版?@Stuart-我使用的是经过修改的Xamarin原版Dialog/Element框架。ButtoneElement.cs源代码可以在这个公共Dropbox链接中找到-(我会让它保持活动状态一两天)@Stuart-ButtonCode.cs文件包含ButtoneElement和ButtonElementMvx类。
set.Bind(buttonElement.uiButton).For("TouchUpInside").To(vm => vm.TouchUpInsideCommand);