绑定到视图控件的ObservableCollection



如何将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中的ResultsItemsResultItems存在拼写错误。另外,如果<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演示。

最新更新