使用弹出菜单将数据数据库显示到列表视图(xamarin)

问题描述 投票:0回答:1

我正在用 c# xamarin 编写一个个人移动应用程序,以保存密码(例如:社交网络/邮件/游戏/在线购买等...)。 我在将数据库中的数据显示到列表视图中时遇到问题,它始终为空白。 我的目标是,当我从弹出页面单击菜单项时,只有来自推送的菜单项的数据显示在列表视图上。 菜单项中的对象(有关密码的类别)与我在数据库中的表匹配。

这里有一些图片可以更好地理解 The page after the login page flyoutmenuitem

我知道 FlyoutPage 有一个 navigationPage 方法,并且它用于进入新页面,但是是否可以在 FlyoutPageDetail 中执行所有操作,或者我是否需要创建新页面并在这些新页面中执行所有操作?

当我一步一步调试并单击一个类别时,我将转到好方法(Listview_ItemSelected(object sender,SelectedItemChangedEventArgs e)

这是我关于不同页面的代码 数据显示 C#

`public partial class DataDisplay : FlyoutPage
{
   
    public DataDisplay()
    {
        InitializeComponent();
        FlyoutPage.ListView.ItemSelected += ListView_ItemSelected;

    }

    private void ListView_ItemSelected(object sender, SelectedItemChangedEventArgs e)
    {
        var selectedCategory = e.SelectedItem as DataDisplayFlyoutMenuItem;
        if (selectedCategory == null)
        {
            return;
        }
        DataBase dbConnexion = new DataBase();
        switch (selectedCategory.Title)
        {
            case "Administratif":
                var getDataAdmin = dbConnexion.GetAdministratifData();
                var result = getDataAdmin.Result;
                GetDataDB getDataDB = new GetDataDB();
                getDataDB.GetDataFromDB = new List<GetDataDB>();
                foreach (var data in result)
                {                        
                    GetDataDB.GetDataFromDB.Add(new GetDataDB { Titre = data.Titre, Login = data.Login, Password = data.Password, Url = data.Url });                        
                }
                                
                break;

            case "Ecommerce":

                break;

            case "Jeux":

                break;

            case "Mail":

                break;

            case "Reseauxsociaux":

                break;
        }
        
        IsPresented = false;
        FlyoutPage.ListView.SelectedItem = null;
    }        
}`

数据显示 XAML

`<?xml version="1.0" encoding="utf-8" ?>
<FlyoutPage xmlns="schemas.microsoft.com/dotnet/2021/maui"
         xmlns:x="schemas.microsoft.com/winfx/2009/xaml"
         x:Class="MemoDePasse.DataDisplay"
         xmlns:pages="clr-namespace:MemoDePasse">
<FlyoutPage.Flyout>
    <pages:DataDisplayFlyout x:Name="FlyoutPage" />
</FlyoutPage.Flyout>
    <FlyoutPage.Detail>
        <NavigationPage>
            <x:Arguments>
                <pages:DataDisplayDetail />
            </x:Arguments>
        </NavigationPage>
</FlyoutPage.Detail>
</FlyoutPage>`

数据显示详细信息 C#

`public partial class DataDisplayDetail : ContentPage
{

    public DataDisplayDetail()
    {
        InitializeComponent();
        BindingContext = new GetDataDB();
    }

    public void BtnClickGoAddingDataPage(object sender, EventArgs e)
    {
        Navigation.PushModalAsync(new AddingDataPage());
    }
}`

数据显示详细信息 XAML

`<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="schemas.microsoft.com/dotnet/2021/maui"
         xmlns:x="schemas.microsoft.com/winfx/2009/xaml"
         x:Class="MemoDePasse.DataDisplayDetail"
         xmlns:local="clr-namespace:MemoDePasse"
         x:DataType="local:GetDataDB"
         Title="Catégories">


<StackLayout>
    <ListView 
    x:Name="ListViewData"
    SeparatorVisibility="Default"
    SeparatorColor="Black"
    ItemsSource="{Binding GetDataFromDB}">

        <ListView.Header>
            <Grid 
            BackgroundColor="LightGray"
            IsEnabled="True"
            IsVisible="True">

                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition Height="*"/>
                </Grid.RowDefinitions>
                <Label
                Grid.Column="0"
                Text="Titre"
                FontAttributes="Bold"
                FontSize="Default"
                HorizontalTextAlignment="Center"
                VerticalTextAlignment="Center"/>

                <Label
                Grid.Column="1"
                Text="Login"
                FontAttributes="Bold"
                FontSize="Default"
                HorizontalTextAlignment="Center"
                VerticalTextAlignment="Center"/>

                <Label
                Grid.Column="2"
                Text="Mot de passe"
                FontAttributes="Bold"
                FontSize="Default"
                HorizontalTextAlignment="Center"
                VerticalTextAlignment="Center"/>

                <Label
                Grid.Column="3"
                Text="URL"
                FontAttributes="Bold"
                FontSize="Default"
                HorizontalTextAlignment="Center"
                VerticalTextAlignment="Center"/>
            </Grid>
        </ListView.Header>
        <ListView.ItemTemplate>
            <DataTemplate>
                <ViewCell>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="*"/>
                        </Grid.RowDefinitions>
                        <Label Grid.Column="0" Text="{Binding Titre}"/>
                        <Label Grid.Column="1" Text="{Binding Login}"/>
                        <Label Grid.Column="2" Text="{Binding Password}"/>
                        <Label Grid.Column="3" Text="{Binding Url}"/>
                    </Grid>
                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
    <Grid VerticalOptions="End">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Button
        x:Name="Add"
        Grid.Column="0"
        Text="Ajouter"
        BackgroundColor="Green"
        Clicked="BtnClickGoAddingDataPage"/>

        <Button
        x:Name="Update"
        Grid.Column="1"
        Text="Modifier"
        BackgroundColor="BlueViolet"/>

        <Button
        x:Name="Delete"
        Grid.Column="2"
        Text="Supprimer"
        BackgroundColor="Red"/>
    </Grid>
</StackLayout>
</ContentPage>`

DataDisplayFlyout C#

`public partial class DataDisplayFlyout : ContentPage
{
    public ListView ListView;

    public DataDisplayFlyout()
    {
        InitializeComponent();

        BindingContext = new FlyoutPage1FlyoutViewModel();
        ListView = MenuItemsListView;
    }

    class FlyoutPage1FlyoutViewModel : INotifyPropertyChanged
    {
        public ObservableCollection<DataDisplayFlyoutMenuItem> MenuItems { get; set; }
        
        public FlyoutPage1FlyoutViewModel()
        {
            MenuItems = new ObservableCollection<DataDisplayFlyoutMenuItem>(new[]
            {
                new DataDisplayFlyoutMenuItem { Id = 0, Title = "Administratif" },
                new DataDisplayFlyoutMenuItem { Id = 1, Title = "Ecommerce" },
                new DataDisplayFlyoutMenuItem { Id = 2, Title = "Jeux" },
                new DataDisplayFlyoutMenuItem { Id = 3, Title = "Mail" },
                new DataDisplayFlyoutMenuItem { Id = 4, Title = "Reseauxsociaux" },
            });
        }            
        #region INotifyPropertyChanged Implementation
        public event PropertyChangedEventHandler PropertyChanged;
        void OnPropertyChanged([CallerMemberName] string propertyName = "")
        {
            if (PropertyChanged == null)
                return;

            PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
        #endregion
    }
}`

DataDisplayFlyout XAML

`<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="schemas.microsoft.com/dotnet/2021/maui"
         xmlns:x="schemas.microsoft.com/winfx/2009/xaml"
         x:Class="MemoDePasse.DataDisplayFlyout"
         Title="Flyout">
<StackLayout>
<ListView x:Name="MenuItemsListView" SeparatorVisibility="None" HasUnevenRows="true" ItemsSource="{Binding MenuItems}">
  <ListView.Header>
    <Grid BackgroundColor="#03A9F4">
      <Grid.ColumnDefinitions>
        <ColumnDefinition Width="10"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="10"/>
      </Grid.ColumnDefinitions>
      <Grid.RowDefinitions>
        <RowDefinition Height="30"/>
        <RowDefinition Height="80"/>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="10"/>
      </Grid.RowDefinitions>
      <Label Grid.Column="1" Grid.Row="1" Text="Catégories" Style="{DynamicResource SubtitleStyle}"/>
    </Grid>
  </ListView.Header>
  <ListView.ItemTemplate>
    <DataTemplate>
      <ViewCell>
        <StackLayout Padding="15,10" HorizontalOptions="FillAndExpand">
          <Label VerticalOptions="FillAndExpand" VerticalTextAlignment="Center" Text="{Binding Title}" FontSize="15"/>
        </StackLayout>
      </ViewCell>
    </DataTemplate>
  </ListView.ItemTemplate>
</ListView>
</StackLayout>
</ContentPage>`

GetDataDB C#(这是我的列表视图与属性 GetDataFromDB 的绑定源)

`public class GetDataDB
{
    public string Titre { get; set; }
    public string Login { get; set; }
    public string Password { get; set; }
    public string Url { get; set; }
    public IList<GetDataDB> GetDataFromDB { get; set; }
    public GetDataDB()
    {
        
    }
}`

如果您想了解更多详情,请告诉我。

我先谢谢你了。 最好的问候。

c# database listview xamarin flyout
1个回答
0
投票

我用不同的方式解决了这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.