【问题标题】:` System.InvalidCastException: 'Specified cast is not valid.'` System.InvalidCastException: '指定的强制转换无效。'
【发布时间】:2021-08-26 21:55:54
【问题描述】:

NavigatePage.xaml:

    <Grid Grid.Row="2">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
    </Grid>
    <Button x:Name="AddToCartButton" BackgroundColor="#FB9B63" CornerRadius="10" HeightRequest="60" FontSize="20" HorizontalOptions="Center"
            Text="Entrer" TextColor="White" VerticalOptions="Center" Clicked="AddToCartButton_Clicked" />
</Grid>

NavigatePage.xaml.cs:

 private void AddToCartButton_Clicked(object sender, EventArgs e)
        {
            var btn = (Button)sender;
            var item = (ProductViewModel)btn.BindingContext;

            ContentPage page=null;

            switch (item.Name)
            {
                case "QR_Manager":
                   page = new Views.Report();
                    break;

            }
            Navigation.PushAsync(page);

MainViewModel.cs:

namespace UpManager.Dashboard.ViewModels
{
    public class MainViewModel : BaseViewModel
    {
        public IList<ProductViewModel> Products { get; set; }

        private ProductViewModel _selectedProduct;

        public ProductViewModel SelectedProduct
        {
            get { return _selectedProduct; }
            set { SetProperty(ref _selectedProduct, value); }
        }

        public ShoppingCartViewModel ShoppingCart { get; set; }

        public ICommand RemoveItemCommand { private set; get; }


        public MainViewModel()
        {
            Products = new ObservableRangeCollection<ProductViewModel>()
            {
                new ProductViewModel()
                {
                    HeroColor = "#95C9F7",
                    Name="QR_Manager",
                    ImageUrl = "QRM",
                    IsFeatured = true,
                    Description = "Contained in a glass polygonal florarium",
                },
                new ProductViewModel()
                {
                    HeroColor = "#FFCA81",
                    Name="Yellow Sun",
                    ImageUrl = "yellow_moss",
                    IsFeatured = true,
                    Description = "Contained in a yellow glass polygonal florarium",
                    

                },

                new ProductViewModel()
                {
                    HeroColor = "#A2BAD3",
                    Name="Grey Blue",
                    ImageUrl = "grey_moss",
                    IsFeatured = true,
                    Description = "Contained in a glass polygonal florarium",
                },

                new ProductViewModel()
                {
                    HeroColor = "#F796DD",
                    Name="Pink",
                    ImageUrl = "pink_moss",
                    IsFeatured = false,
                    Description = "Contained in a glass polygonal florarium",
                },

                 new ProductViewModel()
                {
                    HeroColor = "#95C9F7",
                    Name="Sky Blue",
                    ImageUrl = "blue_moss",
                    IsFeatured = false,
                    Description = "Contained in a glass polygonal florarium",
                },

                new ProductViewModel()
                {
                    HeroColor = "#D69EFC",
                    Name="Lavender",
                    ImageUrl = "lavender_moss",
                    IsFeatured = false,
                    Description = "Contained in a glass polygonal florarium",

                },
                new ProductViewModel()
                {
                    HeroColor = "#74D69E",
                    Name="Green Life",
                    ImageUrl = "green_moss",
                    IsFeatured = true,
                    Description = "Contained in a glass polygonal florarium",

                },
                new ProductViewModel()
                {
                    HeroColor = "#FB8183",
                    Name="Red",
                    ImageUrl = "red_moss",
                    IsFeatured = false,
                    Description = "Contained in a glass polygonal florarium",

                },
                new ProductViewModel()
                {
                    HeroColor = "#FB9B64",
                    Name="Orange",
                    ImageUrl = "orange_moss",
                    IsFeatured = false,
                    Description = "Contained in a glass polygonal florarium",

                },
                new ProductViewModel()
                {
                    HeroColor = "#D69EFC",
                    Name="Lavender",
                    ImageUrl = "lavender_moss",
                    IsFeatured = false,
                    Description = "Contained in a glass polygonal florarium",

                },

            };

我有这个异常 `System.InvalidCastException: 'Specified cast is not valid.'换行:

var item = (ProductViewModel)btn.BindingContext;

我希望 MainViewModel() 中的每个新 ProductViewModel() 都有一个按钮让我转到页面,例如名称为 QR_Manager 的新 ProductViewModel() 我想转到 ManagerPage 和名称为 Yellow Sun 的新 ProductViewModel()想去页面YellowSunPage。

【问题讨论】:

  • @Jason 这是一般情况
  • 这是在 ListView 内部吗?这是我几个小时前问你的问题,你没有回答。
  • @Json 是在列表中
  • ItemsSource 是 ObservableRangeCollection&lt;ProductViewModel&gt; 吗?调试器说BindingContext的类型是什么?
  • 异常:值:{System.InvalidCastException:指定的转换无效。在 C:\Users\DELL\source\repos\project\UpManager\UpManager\UpManager\Dashboard\Controls\NavigatePage 中的 UpManager.Dashboard.Controls.NavigatePage.AddToCartButton_Clicked (System.Object sender, System.EventArgs e) [0x00008]。 xaml.cs:49 atXamarin.Forms.Button.Xamarin.Forms.Internals.IButtonElement.PropagateUpClicked () [0x00000] 在 D:\a\1\s\Xamarin.Forms.Core\Button.cs:187

标签: c# xaml xamarin xamarin.forms xamarin.android


【解决方案1】:

这个错误是因为你在Button上绑定的BindingContext的类型不对应,也就是说绑定路径不正确。

解决问题

  1. 将按钮放在ListView 中。

    <ListView >
         <ListView.ItemTemplate>
             <DataTemplate>
                 <ViewCell>
                     <Button x:Name="AddToCartButton" 
                             BackgroundColor="#FB9B63" CornerRadius="10" HeightRequest="60" FontSize="20" HorizontalOptions="Center"
                             Text="Entrer" TextColor="White" VerticalOptions="Center" Clicked="AddToCartButton_Clicked" />
                 </ViewCell>
             </DataTemplate>
         </ListView.ItemTemplate>
    </ListView>
    
  2. 在视图模型中将ItemsSource 与Products 绑定。

    <ListView ItemsSource="{Binding Products}" >
    
  3. 在page.xaml.cs中将视图模型设置为BindingContext。

    public NavigatePage()
    {
    
       InitializeComponent();
    
       MainViewModel model = new MainViewModel();
       this.BindingContext = model;
    }
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-09
    • 2013-08-27
    • 1970-01-01
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多