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

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

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

DataDisplay 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>`

DataDisplayDetail C#

`public partial class DataDisplayDetail : ContentPage
{

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

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

DataDisplayDetail 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#(这是我的listview的绑定源,带有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()
    {
        
    }
}`

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

ylamdve6

ylamdve61#

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

相关问题