Ali*_*isa 6 .net release image collectionview maui
z在 .net Maui 应用程序中,我遇到以下问题:我的集合视图在调试模式下工作正常,但在发布模式下,集合视图仅显示一个白色矩形,而不是图像和两个标签。onClick 函数工作正常:\n这是 xaml:
\n<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"\n xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"\n xmlns:vm="clr-namespace:VegaMaui"\n xmlns:model="clr-namespace:VegaMaui.Model"\n x:Class="VegaMaui.MenuDetails" x:DataType="vm:MenuDetailsViewModel" \n Title="\xd4\xb1\xd5\xba\xd6\x80\xd5\xa1\xd5\xb6\xd6\x84\xd5\xb6\xd5\xa5\xd6\x80"\n BackgroundColor="#f9f9f9"> \n <CollectionView \n RemainingItemsThreshold="5"\n RemainingItemsThresholdReachedCommand="{Binding LoadMoreS}"\n SelectionMode="Single"\n SelectionChanged="OnProdSelectionChanged"\n ItemsSource="{Binding ProdListS}"\n x:Name="prodcollect">\n <CollectionView.ItemsLayout>\n <GridItemsLayout Orientation="Vertical"\n Span="2" />\n </CollectionView.ItemsLayout> \n <CollectionView.ItemTemplate> \n <DataTemplate x:DataType="model:ProductImg"> \n <Grid Margin="5,5,5,5" Padding="1" >\n <Grid.RowDefinitions>\n <RowDefinition Height="Auto" />\n <RowDefinition Height="Auto" />\n <RowDefinition Height="Auto" />\n <RowDefinition Height="Auto" />\n </Grid.RowDefinitions>\n <Grid.ColumnDefinitions>\n <ColumnDefinition Width="*" /> \n </Grid.ColumnDefinitions>\n <Image\n Grid.Row="0" \n Grid.Column="0" \n Source= "{Binding firstPicture}" \n Aspect="AspectFill"/> \n <Label Grid.Row="1"\n Grid.Column="0" \n FontAttributes="Bold"\n BackgroundColor="White"\n LineBreakMode="WordWrap"\n Text="{Binding product_Name}"\n VerticalOptions="Start" />\n <Label Grid.Row="2"\n Grid.Column="0" \n FontAttributes="Bold"\n LineBreakMode="WordWrap"\n BackgroundColor="White"\n Text="{Binding product_DisPrice, StringFormat='{0:F0} \xd5\xa4\xd6\x80.'}"\n TextColor ="Red" FontSize="Default"\n VerticalOptions="Start" />\n <Label Grid.Row="3"\n Grid.Column="0" \n LineBreakMode="WordWrap"\n BackgroundColor="White"\n IsVisible="{Binding IsShowMode}"\n Text="{Binding product_Price, StringFormat='{0:F0} \xd5\xa4\xd6\x80.'}"\n TextColor="#40414a" FontSize="Default" \n TextDecorations="Strikethrough"\n VerticalOptions="Start" />\n\n </Grid> \n </DataTemplate>\n </CollectionView.ItemTemplate>\n </CollectionView> \n</ContentPage>\nRun Code Online (Sandbox Code Playgroud)\n这是视图模型:
\nnamespace VegaMaui\n{\n public class MenuDetailsViewModel : INotifyPropertyChanged\n {\n public event PropertyChangedEventHandler PropertyChanged;\n private int startindex = 1;\n private int endindex = 10; \n private string SubGrInd = "";\n private readonly VegaApi ApiControl;\n private void OnPropertyChanged(string propertyName) =>\n PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));\n public MenuDetailsViewModel(string SubGroup)\n {\n SubGrInd = SubGroup; \n ApiControl = new();\n // Task.Run(() => this.LoadData(SubGroup)).Wait();\n ProdListS = new ObservableCollection<Model.Product>();\n new Thread(() =>\n {\n LoadDataS();\n }).Start();\n \n } \n public async Task LoadDataS()\n { \n var data = await ApiControl.GetMenuDetAsync(SubGrInd, startindex,endindex);\n ProdListS = new ObservableCollection<Model.Product>(data);\n PropertyChanged.Invoke(this,new PropertyChangedEventArgs(nameof(ProdListS)));\n }\n public ICommand LoadMoreS => new Command(async () =>\n { \n startindex += 16;\n endindex += 16;\n ObservableCollection<Model.Product> data = null;\n new Thread(() =>\n {\n data= ApiControl.GetMenuDetAsync(SubGrInd, startindex, endindex).Result; \n foreach (var item in data)\n {\n ProdListS.Add(item);\n PropertyChanged.Invoke(this, new PropertyChangedEventArgs(nameof(ProdListS)));\n } \n }).Start(); \n }); \n public ObservableCollection<Model.Product> ProdListS { get; set; } \n }\n}\nRun Code Online (Sandbox Code Playgroud)\n } \n public async Task LoadDataS()\n { \n var data = await ApiControl.GetMenuDetAsync(SubGrInd, startindex,endindex);\n ProdListS = new ObservableCollection<Model.Product>(data);\n PropertyChanged.Invoke(this,new PropertyChangedEventArgs(nameof(ProdListS)));\n }\n public ICommand LoadMoreS => new Command(async () =>\n { \n startindex += 16;\n endindex += 16;\n ObservableCollection<Model.Product> data = null;\n new Thread(() =>\n {\n data= ApiControl.GetMenuDetAsync(SubGrInd, startindex, endindex).Result; \n foreach (var item in data)\n {\n ProdListS.Add(item);\n PropertyChanged.Invoke(this, new PropertyChangedEventArgs(nameof(ProdListS)));\n } \n }).Start(); \n }); \n public ObservableCollection<Model.Product> ProdListS { get; set; } \n}\nRun Code Online (Sandbox Code Playgroud)\n}
\n公共部分类 MenuDetails : ContentPage\n{\npublic string[] ImgList;
\nprivate MenuDetailsViewModel _mdvm;\npublic MenuDetails(string subGID)\n{ \n BindingContext = _mdvm = new MenuDetailsViewModel(subGID);\n InitializeComponent(); \n \n}\nasync void OnProdSelectionChanged(object sender, SelectionChangedEventArgs e)\n{\n \n Model.Product prodItem = this.prodcollect.SelectedItem as Model.Product;\n int id_Param = prodItem.product_Id;\n VegaApi ApiControl = new();\n List<Model.ProdParams> ParamList = await ApiControl.GetParamDetAsync(id_Param.ToString()); \n ProdInformation ProfilePage = new ProdInformation();\n ProfilePage.Title = this.Title;\n ProfilePage.BindingContext = prodItem; \n VerticalStackLayout PropsStack = ProfilePage.FindByName<VerticalStackLayout>("InfoLayout");\n //Label NmLabel = ProfilePage.FindByName<Label>("prodname");\n //NmLabel.Text = prodItem.product_Name;\n //Label PrLabel = ProfilePage.FindByName<Label>("prodprice");\n //PrLabel.Text = prodItem\xe2\x80\xa4+ " \xd5\xa4\xd6\x80.";\n \n // Adding Images carousel view \n string[] picarray = prodItem.product_PicturePath.Split('@');\n System.Collections.ObjectModel.ObservableCollection<Promo> Data = new System.Collections.ObjectModel.ObservableCollection<Promo>(); \n Data.Add(new Promo() { ImgSource =prodItem.firstPicture});\n if (picarray.Count() > 1)\n { \n for (int k = 1; k < picarray.Count(); k++)\n {\n if (picarray[k] != null && picarray[k].Length > 3)\n {\n Data.Add(new Promo() { ImgSource = "https://vega.am/image/"+ picarray[k] });\n }\n }\n }\n \n CarouselView CurCarousel= ProfilePage.FindByName<CarouselView>("pcarousel");\n CurCarousel.ItemsSource = Data;\n // StackLayout slayout = new StackLayout(); \n \n \n // PropsStack.Add(primage);\n List<int> TitleIds = (from el in ParamList select el.Title_Id).Distinct().ToList();\n if (TitleIds != null && TitleIds.Count > 0)\n {\n for (int j = 0; j<TitleIds.Count; j++)\n {\n List<Model.ProdParams> subLst= ParamList.Where(p => p.Title_Id == TitleIds[j]).ToList();\n if(subLst != null && subLst.Count > 0)\n {\n Label ltitle= new Label();\n ltitle.Text = subLst[0].Title_Name;\n ltitle.FontSize = 18;\n ltitle.TextColor = Color.FromRgb(16, 26, 175);\n ltitle.Padding = new Thickness(3, 5, 3, 5);\n ltitle.HorizontalOptions = LayoutOptions.Start;\n PropsStack.Add(ltitle);\n Grid CurGrid = new Grid\n {\n \n ColumnDefinitions =\n {\n new ColumnDefinition{Width = new GridLength(5, GridUnitType.Star)},\n new ColumnDefinition{Width = new GridLength(3, GridUnitType.Star)}\n }\n }; \n for (int q=0;q< subLst.Count;q++)\n { \n CurGrid.AddRowDefinition(new RowDefinition());\n \n \n CurGrid.Add(new Label\n {\n \n Text = subLst[q].Param_Name+" ",\n LineBreakMode = LineBreakMode.WordWrap,\n MaxLines =2,\n HorizontalOptions = LayoutOptions.Start,\n VerticalOptions = LayoutOptions.Center\n },0,q);\n CurGrid.Add(new Label\n {\n Text = subLst[q].Param_Value,\n LineBreakMode = LineBreakMode.WordWrap,\n MaxLines = 2,\n HorizontalOptions = LayoutOptions.Start,\n VerticalOptions = LayoutOptions.Center\n },1,q);\n }\n PropsStack.Add(CurGrid);\n }\n }\n } \n await Navigation.PushAsync(ProfilePage);\n}\nRun Code Online (Sandbox Code Playgroud)\n}
\n我看到绑定的 ItemsSource:
ItemsSource="{Binding ProdListS}"
Run Code Online (Sandbox Code Playgroud)
指定ProductImg型号:
<DataTemplate x:DataType="model:ProductImg">
Run Code Online (Sandbox Code Playgroud)
然而在代码中你有:
public ObservableCollection<Model.Product> ProdListS { get; set; }
Run Code Online (Sandbox Code Playgroud)
这是你应该努力的。
不匹配模型是完全可以的,甚至不指定模型作为 DataTemplate 的 DataType。只要你调试一下。
在发行版中情况并不相同。
| 归档时间: |
|
| 查看次数: |
459 次 |
| 最近记录: |