【发布时间】: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<ProductViewModel>吗?调试器说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