如何将ObservableCollection绑定到自定义视图?
我已将自定义视图添加到页面:
主页.xaml:
<ContentPage.Content>
<vw:ResultsListView />
</ContentPage.Content>
在MainViewModel.cs中有一个相应的属性:
private ObservableCollection<FertInspectionResult> _ResultsItems;
public ObservableCollection<FertInspectionResult> ResultsItems
{
get => _ResultsItems;
set => SetProperty(ref _ResultsItems, value);
}
ResultListView是一个简单的集合视图:
<ContentView.Content>
<CollectionView ItemsSource="{Binding ResultsItems}">
<CollectionView.ItemTemplate>
<DataTemplate>
<Label Text="{Binding SEQ}"/>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
</ContentView.Content>
我知道这是不正确的,但我找不到一种方法来创建BindableProperty,以填充CollectionView。
在视图模型中,xaml中的ResultsItems
与ResultItems
存在拼写错误。另外,如果<vw:ResultsListView />
包含您的集合,则应该使用命名空间来获取集合。
您可以在Xamarin.Forms可绑定属性中为自定义控件创建可绑定属性,就像这样:
public static readonly BindableProperty ResultsItemsSourceProperty =BindableProperty.Create("ResultsItemsSource", typeof(ObservableCollection<MyItem>), typeof(MyContentView), null);
public ObservableCollection<MyItem> ResultsItemsSource
{
get => (ObservableCollection<MyItem>)GetValue(MyContentView.ResultsItemsSourceProperty);
set => SetValue(MyContentView.ResultsItemsSourceProperty, value);
}
然后在MainPage.xaml中,您可以使用创建的属性:
< vm:ResultListView ResultsItemsSource="{Binding ResultsItems}" />
在ResultListView中,只需将CollectionView的BindingContext设置为ContentView本身:
<ContentView
...
x:Name="this">
<CollectionView BindingContext="{x:Reference this}" ItemsSource="{Binding ResultsItemsSource}">
现在,您可以将ViewModel中生成的ResultsItems绑定到ResultListView。
有关更多信息,您也可以参考ContentView演示。