在Xamarin Forms中,如何在代码后台中设置ListView的ItemSource绑定?

3

我似乎无法得到这个问题的直接答案。我正在尝试在代码后台设置项源。这在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绑定):

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


</ListView>

在代码后台。
任何帮助都将不胜感激。
1个回答

7

要在控件上进行程序化绑定,您需要将其作为参数传递给扩展方法。参考链接:扩展方法成员方法

例如,尝试:

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

这会将路径“routeLabels”与控件的BindingContext(即视图模型)建立绑定关系。

此外,建议根据C#属性的标准命名策略将“routeLabels”更改为“RouteLabels”。


我会试一试。稍等一下。 - user3355961

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接