我正在用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()
{
}
}`
如果你想要更多的细节,请告诉我。
我先谢谢你。最好的问候。
1条答案
按热度按时间ylamdve61#
我解决了这个问题,但以不同的方式。