在Xamarin Forms后面的代码中设置ListView ItemSource绑定

时间:2017-09-12 10:38:13

标签: c# xaml xamarin.forms

我似乎无法直接回答这个问题。 我试图在后面的代码中设置项目源。这在Xaml中很容易做到,但在后面的代码中似乎并不那么直接。

在我正在使用的代码中:

Binding listbind = new Binding("routeLabels") {Source=this};

listviewofroutes.ItemsSource = SetBinding(ListView.ItemsSourceProperty, listbind);

这只会引发错误,并且无法将void转换为System.Collections.IEnumerable"我也认为这不正确。

我试图将它绑定到视图模型中的可观察集合。

视图模型:

private ObservableCollection<RouteInfo> _routelabels;
    public ObservableCollection<RouteInfo> routeLabels
    {
        get { return _routelabels; }
        set
        {
            if (Equals(value, _routelabels)) return;
            _routelabels = value;
            OnPropertyChanged(nameof(routeLabels));

        }
    }

在Xaml中设置绑定时,此绑定可正常工作。 问题是不可观察的集合问题是我不知道如何在后面的代码中设置绑定。

要点:

我需要知道怎么做(itemsource binding):

<ListView x:Name="listviewofroutes" ItemsSource="{Binding routeLabels}">


</ListView>

在背后的代码中。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

要以编程方式设置控件的绑定,必须将其作为参数传递给extension方法。参考链接:extension methodsmember method

例如,尝试:

listviewofroutes.SetBinding(ListView.ItemsSourceProperty, "routeLabels")
//Or, 
listviewofroutes.SetBinding(ListView.ItemsSourceProperty, new Binding("routeLabels")) 

这将路径设置为&#39; routeLabels&#39;并控制BindingContext这是视图模型。

另外,会建议更改&#39; routeLabels&#39; to&#39; RouteLabels&#39;根据C#属性的标准命名策略。