XAML 绑定到视图控件的ObservableCollection

waxmsbnn  于 2022-12-07  发布在  其他
关注(0)|答案(2)|浏览(188)

如何将ObservableCollection绑定到自定义视图?
我已将自定义视图添加到网页:
MainPage.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。

uujelgoq

uujelgoq1#

xaml中的ResultsItems与视图模型中的ResultItems存在拼写错误。此外,如果<vw:ResultsListView />包含您的集合,则应使用命名空间获取集合。

23c0lvtd

23c0lvtd2#

您可以在Xamarin.Forms Bindable Properties中为自定义控件创建可绑定的属性,如下所示:

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 Demo

相关问题