如何从ContentView上下文中使用的ListView绑定“轻击”事件处理程序?

时间:2019-03-24 08:57:27

标签: c# xamarin

在我的Xamarin项目中。由于“ ContentView”,我想创建一个使用ListView的控件。我之所以使用ContentView方法,是因为我应该在项目中以模块化方式多次重复使用此控件元素。 我可以为视图的不同元素成功创建绑定属性。 但是我找不到方法来为绑定到我的Listview的动作创建Binding属性(例如,“轻按”)。我已经在其他ContentView中通过使用元素和EventHandlers的“命令”属性(例如Button.Command)来做到这一点。但是听起来ListView并没有实现这种特性。

这是我到目前为止用于ListView的代码

    public partial class ItemSelectListView : ContentView
{
    public static readonly BindableProperty ItemListViewProperty=
        BindableProperty.Create("ItemListView", typeof(IEnumerable<Item>), typeof(ItemSelectListView), default(Item));

    public IEnumerable<Item> ItemListView
    {
        get { return (IEnumerable<Item>)GetValue(ItemListViewProperty); }
        set { SetValue(ItemListViewProperty, value); }
    }


    public static readonly BindableProperty TitleLabelProperty =
        BindableProperty.Create("TitleLabel", typeof(string), typeof(ItemSelectListView), default(string));

    public string TitleLabel
    {
        get { return (string)GetValue(TitleLabelProperty); }
        set { SetValue(TitleLabelProperty, value); }
    }

    public ItemSelectListView ()
    {
        InitializeComponent ();
        ListView.SetBinding(ListView.ItemsSourceProperty, new Binding("ItemListView", source: this));
        Title.SetBinding(Label.TextProperty, new Binding("TitleLabel", source: this));            

    }
}

这是例如我用来创建无法为ListView复制的EventHandler的方式

    public partial class ItemSelectButtonView : ContentView
{
    public static readonly BindableProperty LeftButtonTextProperty =
        BindableProperty.Create("LeftButtonText", typeof(string), typeof(ItemSelectButtonView), default(string));

    public string LeftButtonText
    {
        get { return (string)GetValue(LeftButtonTextProperty);}
        set { SetValue(LeftButtonTextProperty, value); }
    }

    public static readonly BindableProperty RightButtonTextProperty =
        BindableProperty.Create("RightButtonText", typeof(string), typeof(ItemSelectButtonView), default(string));

    public string RightButtonText
    {
        get { return (string)GetValue(RightButtonTextProperty); }
        set { SetValue(RightButtonTextProperty, value); }
    }

    public event EventHandler RightButtonClicked;
    public event EventHandler LeftButtonClicked;



    public ItemSelectButtonView ()
    {
        InitializeComponent ();
        LeftButton.SetBinding(Button.TextProperty, new Binding("LeftButtonText", source: this));
        RightButton.SetBinding(Button.TextProperty, new Binding("RightButtonText", source: this));

        LeftButton.Command = new Command(() =>
        {
            LeftButtonClicked?.Invoke(this, EventArgs.Empty);
        });

        RightButton.Command = new Command(() =>
        {
            RightButtonClicked?.Invoke(this, EventArgs.Empty);
        });
    }

}

那么如何用ListView获得相同的结果?

谢谢

1 个答案:

答案 0 :(得分:0)

我最终可以按照以下方式进行操作。 不确定它是否是最干净的。

delay