从CollectionView绑定SelectedItem

时间:2019-09-18 17:45:55

标签: c# mvvm xamarin.forms prism

我正在使用XamarinForms v4.2,Prism.Dryloc v7.2和Refit在xamarin-forms上开发我的第一款应用程序。

我的菜单页上有3个collectionview

  1. 食物
  2. 饮料
  3. 购物车

Web服务填充了前两个,并且它们工作得很好,我需要选择每个服务中的一个,并且我试图将所选项目绑定到Cart集合,我正在调试以了解其工作方式,但是在选择的瞬间出现在我的调试控制台上:
 "[0:] Binding: KioscoColab.Models.Menu can not be converted to type 'System.Collections.ObjectModel.ObservableCollection'1[KioscoColab.Models.Menu]

这是我的代码:

ViewModel

...

ObservableCollection<Menu> _food;
ObservableCollection<Menu> _drinks;
ObservableCollection<Menu> _cart;

public ObservableCollection<Menu> Food
{
     get => _food;
     set => SetProperty(ref _food, value);
}

public ObservableCollection<Menu> Drinks
{
     get => _drinks;
     set => SetProperty(ref _drinks, value);
}

public ObservableCollection<Menu> Cart
{
     get => _cart;
     set => SetProperty(ref _cart, value);
}

...
public async Task LoadMenu()
{
     //Here is my logic for the web service
     ...
     Food = new ObservableCollection<Menu>(food.Content);
     Drinks = new ObservableCollection<Menu>(drinks.Content);
     Cart = new ObservableCollection<Menu>();
}
...

XamlPage

<!--  CollectionView Food-->
<CollectionView
            Grid.Row="1"
            Grid.Column="0"
            Margin="5"
            ItemsSource="{Binding Food}"
            SelectedItem="{Binding Cart, Mode=TwoWay}"
            SelectionMode="Single"
            VerticalScrollBarVisibility="Always">
            <CollectionView.ItemsLayout>
                <GridItemsLayout Orientation="Vertical" />
            </CollectionView.ItemsLayout>
            <CollectionView.ItemTemplate>
                <DataTemplate>
                    <Grid Margin="5">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="*" />
                        </Grid.ColumnDefinitions>
                        <Label
                            Grid.Column="0"
                            FontSize="Medium"
                            Text="{Binding Description}"
                            VerticalOptions="Center" />
                        <Label
                            Grid.Column="1"
                            FontSize="Medium"
                            HorizontalTextAlignment="End"
                            Text="{Binding Price, StringFormat='{0:C}'}"
                            VerticalOptions="Center" />
                    </Grid>
                </DataTemplate>
            </CollectionView.ItemTemplate>
        </CollectionView>


<!--  CollectionView Cart  -->
<CollectionView
            Grid.Row="1"
            Grid.Column="1"
            Margin="5"
            ItemsSource="{Binding Cart}"
            VerticalScrollBarVisibility="Always">            
            <CollectionView.ItemsLayout>
                <GridItemsLayout Orientation="Vertical" Span="2" />
            </CollectionView.ItemsLayout>
            <CollectionView.ItemTemplate>
                <DataTemplate>
                    <Grid Margin="5">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="20" />
                        </Grid.ColumnDefinitions>
                        <Label
                            Grid.Column="0"
                            FontSize="18"
                            Text="{Binding Description}"
                            VerticalOptions="Center" />
                        <Label
                            Grid.Column="1"
                            FontSize="18"
                            Text="{Binding Price}"
                            VerticalOptions="End" />
                    </Grid>
                </DataTemplate>
            </CollectionView.ItemTemplate>
        </CollectionView>

如何制作演员?还是我该怎么办?

0 个答案:

没有答案