使用flyoutmenu将数据DB显示到列表视图(xamarin)

von4xj4u  于 2023-09-28  发布在  其他
关注(0)|答案(1)|浏览(147)

我正在用C# xamarin编写一个个人移动的应用程序,以便保存密码(例如:社交网络/邮件/游戏/在线购买等)。我有一个问题,显示数据库中的数据到列表视图,它总是空白的。我的目标是当我点击弹出页面上的菜单项时,只有来自菜单项的数据被推到列表视图上。menuitem中的对象(关于密码的类别)与我在数据库中的表匹配。
这里有一些图片来更好地理解The page after the login pageflyoutmenuitem
我知道一个flyoutpage有一个navigationPage方法,它用于进入一个新页面,但是是否可以在FlyoutPageDetail中执行所有操作,或者我需要创建新页面并在这些新页面中执行所有操作?
当我调试一步一步,我点击一个类别,我去好方法(Listview_ItemSelected(object sender,SelectedItemChangedEventArgs e)
这里我的代码关于我的不同页面DataDisplay C#

  1. `public partial class DataDisplay : FlyoutPage
  2. {
  3. public DataDisplay()
  4. {
  5. InitializeComponent();
  6. FlyoutPage.ListView.ItemSelected += ListView_ItemSelected;
  7. }
  8. private void ListView_ItemSelected(object sender, SelectedItemChangedEventArgs e)
  9. {
  10. var selectedCategory = e.SelectedItem as DataDisplayFlyoutMenuItem;
  11. if (selectedCategory == null)
  12. {
  13. return;
  14. }
  15. DataBase dbConnexion = new DataBase();
  16. switch (selectedCategory.Title)
  17. {
  18. case "Administratif":
  19. var getDataAdmin = dbConnexion.GetAdministratifData();
  20. var result = getDataAdmin.Result;
  21. GetDataDB getDataDB = new GetDataDB();
  22. getDataDB.GetDataFromDB = new List<GetDataDB>();
  23. foreach (var data in result)
  24. {
  25. GetDataDB.GetDataFromDB.Add(new GetDataDB { Titre = data.Titre, Login = data.Login, Password = data.Password, Url = data.Url });
  26. }
  27. break;
  28. case "Ecommerce":
  29. break;
  30. case "Jeux":
  31. break;
  32. case "Mail":
  33. break;
  34. case "Reseauxsociaux":
  35. break;
  36. }
  37. IsPresented = false;
  38. FlyoutPage.ListView.SelectedItem = null;
  39. }
  40. }`

DataDisplay XAML

  1. `<?xml version="1.0" encoding="utf-8" ?>
  2. <FlyoutPage xmlns="schemas.microsoft.com/dotnet/2021/maui"
  3. xmlns:x="schemas.microsoft.com/winfx/2009/xaml"
  4. x:Class="MemoDePasse.DataDisplay"
  5. xmlns:pages="clr-namespace:MemoDePasse">
  6. <FlyoutPage.Flyout>
  7. <pages:DataDisplayFlyout x:Name="FlyoutPage" />
  8. </FlyoutPage.Flyout>
  9. <FlyoutPage.Detail>
  10. <NavigationPage>
  11. <x:Arguments>
  12. <pages:DataDisplayDetail />
  13. </x:Arguments>
  14. </NavigationPage>
  15. </FlyoutPage.Detail>
  16. </FlyoutPage>`

DataDisplayDetail C#

  1. `public partial class DataDisplayDetail : ContentPage
  2. {
  3. public DataDisplayDetail()
  4. {
  5. InitializeComponent();
  6. BindingContext = new GetDataDB();
  7. }
  8. public void BtnClickGoAddingDataPage(object sender, EventArgs e)
  9. {
  10. Navigation.PushModalAsync(new AddingDataPage());
  11. }
  12. }`

DataDisplayDetail XAML

  1. `<?xml version="1.0" encoding="utf-8" ?>
  2. <ContentPage xmlns="schemas.microsoft.com/dotnet/2021/maui"
  3. xmlns:x="schemas.microsoft.com/winfx/2009/xaml"
  4. x:Class="MemoDePasse.DataDisplayDetail"
  5. xmlns:local="clr-namespace:MemoDePasse"
  6. x:DataType="local:GetDataDB"
  7. Title="Catégories">
  8. <StackLayout>
  9. <ListView
  10. x:Name="ListViewData"
  11. SeparatorVisibility="Default"
  12. SeparatorColor="Black"
  13. ItemsSource="{Binding GetDataFromDB}">
  14. <ListView.Header>
  15. <Grid
  16. BackgroundColor="LightGray"
  17. IsEnabled="True"
  18. IsVisible="True">
  19. <Grid.ColumnDefinitions>
  20. <ColumnDefinition Width="*"/>
  21. <ColumnDefinition Width="*"/>
  22. <ColumnDefinition Width="*"/>
  23. <ColumnDefinition Width="*"/>
  24. </Grid.ColumnDefinitions>
  25. <Grid.RowDefinitions>
  26. <RowDefinition Height="*"/>
  27. </Grid.RowDefinitions>
  28. <Label
  29. Grid.Column="0"
  30. Text="Titre"
  31. FontAttributes="Bold"
  32. FontSize="Default"
  33. HorizontalTextAlignment="Center"
  34. VerticalTextAlignment="Center"/>
  35. <Label
  36. Grid.Column="1"
  37. Text="Login"
  38. FontAttributes="Bold"
  39. FontSize="Default"
  40. HorizontalTextAlignment="Center"
  41. VerticalTextAlignment="Center"/>
  42. <Label
  43. Grid.Column="2"
  44. Text="Mot de passe"
  45. FontAttributes="Bold"
  46. FontSize="Default"
  47. HorizontalTextAlignment="Center"
  48. VerticalTextAlignment="Center"/>
  49. <Label
  50. Grid.Column="3"
  51. Text="URL"
  52. FontAttributes="Bold"
  53. FontSize="Default"
  54. HorizontalTextAlignment="Center"
  55. VerticalTextAlignment="Center"/>
  56. </Grid>
  57. </ListView.Header>
  58. <ListView.ItemTemplate>
  59. <DataTemplate>
  60. <ViewCell>
  61. <Grid>
  62. <Grid.ColumnDefinitions>
  63. <ColumnDefinition Width="*"/>
  64. <ColumnDefinition Width="*"/>
  65. <ColumnDefinition Width="*"/>
  66. <ColumnDefinition Width="*"/>
  67. </Grid.ColumnDefinitions>
  68. <Grid.RowDefinitions>
  69. <RowDefinition Height="*"/>
  70. </Grid.RowDefinitions>
  71. <Label Grid.Column="0" Text="{Binding Titre}"/>
  72. <Label Grid.Column="1" Text="{Binding Login}"/>
  73. <Label Grid.Column="2" Text="{Binding Password}"/>
  74. <Label Grid.Column="3" Text="{Binding Url}"/>
  75. </Grid>
  76. </ViewCell>
  77. </DataTemplate>
  78. </ListView.ItemTemplate>
  79. </ListView>
  80. <Grid VerticalOptions="End">
  81. <Grid.ColumnDefinitions>
  82. <ColumnDefinition Width="*"/>
  83. <ColumnDefinition Width="*"/>
  84. <ColumnDefinition Width="*"/>
  85. </Grid.ColumnDefinitions>
  86. <Button
  87. x:Name="Add"
  88. Grid.Column="0"
  89. Text="Ajouter"
  90. BackgroundColor="Green"
  91. Clicked="BtnClickGoAddingDataPage"/>
  92. <Button
  93. x:Name="Update"
  94. Grid.Column="1"
  95. Text="Modifier"
  96. BackgroundColor="BlueViolet"/>
  97. <Button
  98. x:Name="Delete"
  99. Grid.Column="2"
  100. Text="Supprimer"
  101. BackgroundColor="Red"/>
  102. </Grid>
  103. </StackLayout>
  104. </ContentPage>`

DataDisplayFlyout C#

  1. `public partial class DataDisplayFlyout : ContentPage
  2. {
  3. public ListView ListView;
  4. public DataDisplayFlyout()
  5. {
  6. InitializeComponent();
  7. BindingContext = new FlyoutPage1FlyoutViewModel();
  8. ListView = MenuItemsListView;
  9. }
  10. class FlyoutPage1FlyoutViewModel : INotifyPropertyChanged
  11. {
  12. public ObservableCollection<DataDisplayFlyoutMenuItem> MenuItems { get; set; }
  13. public FlyoutPage1FlyoutViewModel()
  14. {
  15. MenuItems = new ObservableCollection<DataDisplayFlyoutMenuItem>(new[]
  16. {
  17. new DataDisplayFlyoutMenuItem { Id = 0, Title = "Administratif" },
  18. new DataDisplayFlyoutMenuItem { Id = 1, Title = "Ecommerce" },
  19. new DataDisplayFlyoutMenuItem { Id = 2, Title = "Jeux" },
  20. new DataDisplayFlyoutMenuItem { Id = 3, Title = "Mail" },
  21. new DataDisplayFlyoutMenuItem { Id = 4, Title = "Reseauxsociaux" },
  22. });
  23. }
  24. #region INotifyPropertyChanged Implementation
  25. public event PropertyChangedEventHandler PropertyChanged;
  26. void OnPropertyChanged([CallerMemberName] string propertyName = "")
  27. {
  28. if (PropertyChanged == null)
  29. return;
  30. PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName));
  31. }
  32. #endregion
  33. }
  34. }`

DataDisplayFlyout XAML

  1. `<?xml version="1.0" encoding="utf-8" ?>
  2. <ContentPage xmlns="schemas.microsoft.com/dotnet/2021/maui"
  3. xmlns:x="schemas.microsoft.com/winfx/2009/xaml"
  4. x:Class="MemoDePasse.DataDisplayFlyout"
  5. Title="Flyout">
  6. <StackLayout>
  7. <ListView x:Name="MenuItemsListView" SeparatorVisibility="None" HasUnevenRows="true" ItemsSource="{Binding MenuItems}">
  8. <ListView.Header>
  9. <Grid BackgroundColor="#03A9F4">
  10. <Grid.ColumnDefinitions>
  11. <ColumnDefinition Width="10"/>
  12. <ColumnDefinition Width="*"/>
  13. <ColumnDefinition Width="10"/>
  14. </Grid.ColumnDefinitions>
  15. <Grid.RowDefinitions>
  16. <RowDefinition Height="30"/>
  17. <RowDefinition Height="80"/>
  18. <RowDefinition Height="Auto"/>
  19. <RowDefinition Height="10"/>
  20. </Grid.RowDefinitions>
  21. <Label Grid.Column="1" Grid.Row="1" Text="Catégories" Style="{DynamicResource SubtitleStyle}"/>
  22. </Grid>
  23. </ListView.Header>
  24. <ListView.ItemTemplate>
  25. <DataTemplate>
  26. <ViewCell>
  27. <StackLayout Padding="15,10" HorizontalOptions="FillAndExpand">
  28. <Label VerticalOptions="FillAndExpand" VerticalTextAlignment="Center" Text="{Binding Title}" FontSize="15"/>
  29. </StackLayout>
  30. </ViewCell>
  31. </DataTemplate>
  32. </ListView.ItemTemplate>
  33. </ListView>
  34. </StackLayout>
  35. </ContentPage>`

GetDataDB C#(这是我的listview的绑定源,带有GetDataFromDB属性)

  1. `public class GetDataDB
  2. {
  3. public string Titre { get; set; }
  4. public string Login { get; set; }
  5. public string Password { get; set; }
  6. public string Url { get; set; }
  7. public IList<GetDataDB> GetDataFromDB { get; set; }
  8. public GetDataDB()
  9. {
  10. }
  11. }`

如果你想要更多的细节,请告诉我。
我先谢谢你。最好的问候。

ylamdve6

ylamdve61#

我解决了这个问题,但以不同的方式。

相关问题