Я создаю свое первое «большее» приложение WPF, и я подумал о чем-то похожем на трут. Я уже создал карту, которая выглядит следующим образом: Результат
Показывает первого пользователя в моей базе данных. Моя цель - когда я нажимаю правую (следующую) или левую (предыдущую) кнопки, чтобы показать следующего или предыдущего пользователя из моей базы данных.
Вот моя модель класса Gebruiker (извините за голландские имена .. ):
namespace project_amber_akkermans.Model
{
class Gebruiker : BaseModel
{
private int id;
private string naam;
private string adres;
private string woonplaats;
private string email;
private string gsm;
private string functie;
private string bestemming;
public int ID { get; set; }
public string Naam { get; set; }
public string Adres { get; set; }
public string Woonplaats { get; set; }
public string Email { get; set; }
public string Gsm { get; set; }
public string Bestemming { get; set; }
public string Functie { get; set; }
}
}
Моя модель представления, я вижу, что мои команды next и prev обновляют идентификатор, и выполняется sql, но я не знаю, не обновляется ли мой currentGebruiker, или что мой XAML не обновляется:
class ZoekMatchViewModel : BaseViewModel
{
public ZoekMatchViewModel()
{
LeesGebruiker(1);
KoppelenCommands();
}
private int aantal_gebruikers;
public int Aantal_gebruikers
{
get
{
return aantal_gebruikers;
}
set
{
aantal_gebruikers = value;
NotifyPropertyChanged();
}
}
private Gebruiker currentGebruiker;
public Gebruiker CurrentGebruiker
{
get
{
return currentGebruiker;
}
set
{
currentGebruiker = value;
NotifyPropertyChanged();
}
}
private void KoppelenCommands()
{
NextCommand = new BaseCommand(VolgendeGebruiker);
PrevCommand = new BaseCommand(VorigeGebruiker);
}
public ICommand NextCommand { get; set; }
public ICommand PrevCommand { get; set; }
private void LeesGebruikers()
{
//instantiëren dataservice
ZoekMatchDataService zoekMatchDS =
new ZoekMatchDataService();
aantal_gebruikers = zoekMatchDS.GetGebruikers();
}
private void LeesGebruiker(int id)
{
//instantiëren dataservice
ZoekMatchDataService zoekMatchDS =
new ZoekMatchDataService();
currentGebruiker = zoekMatchDS.GetGebruiker(id);
}
public void VolgendeGebruiker()
{
if (CurrentGebruiker != null)
{
if (currentGebruiker.ID+1 != aantal_gebruikers) //if id +1 != number of users in the database, if last user in database, jump back to first
{
int id = (currentGebruiker.ID) + 1;
LeesGebruiker(id);
}
else
{
int id = 1;
LeesGebruiker(id);
}
}
}
public void VorigeGebruiker()
{
if (CurrentGebruiker != null)
{
if (currentGebruiker.ID-1 != 0) //if id -1 != 0 (lowest id = 1, so if 0, jump to last user)
{
int id = (currentGebruiker.ID) - 1;
LeesGebruiker(id);
}
else
{
int id = aantal_gebruikers;
LeesGebruiker(id);
}
}
}
}
Класс Dataservice, который получает данные из моей базы данных (я использую Dapper):
class ZoekMatchDataService
{
// Ophalen ConnectionString uit App.config
private static string connectionString =
ConfigurationManager.ConnectionStrings["local"].ConnectionString;
// Stap 1 Dapper
// Aanmaken van een object uit de IDbConnection class en
// instantiëren van een SqlConnection.
// Dit betekent dat de connectie met de database automatisch geopend wordt.
private static IDbConnection db = new SqlConnection(connectionString);
public int GetGebruikers()
{
// Stap 2 Dapper
// Uitschrijven SQL statement & bewaren in een string.
string sql = "Select * from Gebruiker";
// Stap 3 Dapper
// Uitvoeren SQL statement op db instance
// Type casten van het generieke return type naar een collectie van contactpersonen
return (int)db.Query<Gebruiker>(sql).Count();
}
public Gebruiker GetGebruiker(int id)
{
// Stap 2 Dapper
// Uitschrijven SQL statement & bewaren in een string.
string sql = "Select * from Gebruiker where ID = " + id;
// Stap 3 Dapper
// Uitvoeren SQL statement op db instance
return (Gebruiker)db.Query<Gebruiker>(sql).FirstOrDefault();
}
public void InsertMatch(Gebruiker gebruiker)
{
// SQL statement insert
string date = DateTime.UtcNow.ToString("dd-MM-YYYY");
string sql = "Insert into Match (Gebruiker1Id, Gebruiker2Id, Datum, Geaccepteerd) values (1," + gebruiker.ID + ","+ date +", false)";
// Uitvoeren SQL statement en doorgeven parametercollectie
db.Execute(sql, new
{
gebruiker.Naam,
gebruiker.Email
});
}
}
И самая важная часть из моего XAML:
<Page x:Class="project_amber_akkermans.View.MakeMatch"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:project_amber_akkermans.View"
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
xmlns:smtx="clr-namespace:ShowMeTheXAML;assembly=ShowMeTheXAML"
xmlns:viewmodel="clr-namespace:project_amber_akkermans.ViewModel"
mc:Ignorable="d"
Title="MakeMatch" Height="450" Width="800">
<Page.Resources>
<viewmodel:ZoekMatchViewModel x:Key="ZoekMatchViewModel"/>
</Page.Resources>
<DockPanel LastChildFill="True" HorizontalAlignment="Center" VerticalAlignment="Center" DataContext="{DynamicResource ZoekMatchViewModel}">
<Button Command="{Binding PrevCommand}" Background="Transparent" BorderThickness="0" Height="50">
<StackPanel Orientation="Horizontal" DockPanel.Dock="Left" VerticalAlignment="Center" Margin="0 -10 35 0">
<materialDesign:PackIcon Kind="ChevronLeft" Foreground="DarkGoldenrod" Background="Transparent" Margin="0 0 -50 0" Width="65" Height="65" />
<materialDesign:PackIcon Kind="ChevronLeft" Foreground="LightSlateGray" Margin="0 0 -50 0" Width="65" Height="65"/>
<materialDesign:PackIcon Kind="ChevronLeft" Foreground="WhiteSmoke" Margin="0 0 -50 0" Width="65" Height="65"/>
</StackPanel>
</Button>
<smtx:XamlDisplay Key="cards_1" Margin="4 4 0 0">
<materialDesign:Flipper Style="{StaticResource MaterialDesignCardFlipper}">
<materialDesign:Flipper.FrontContent>
<Grid Height="350" Width="200">
<Grid.RowDefinitions>
<RowDefinition Height="250" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<materialDesign:ColorZone Mode="PrimaryMid" VerticalAlignment="Stretch">
<materialDesign:PackIcon Kind="AccountCircle" Height="128" Width="128"
VerticalAlignment="Center" HorizontalAlignment="Center" />
</materialDesign:ColorZone>
<StackPanel Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock Text="{Binding CurrentGebruiker.Naam , Mode=TwoWay}"></TextBlock>
<Button Style="{StaticResource MaterialDesignFlatButton}" Foreground="DarkGoldenrod"
Command="{x:Static materialDesign:Flipper.FlipCommand}"
Margin="0 4 0 0"
>SHOW DETAILS</Button>
</StackPanel>
</Grid>
</materialDesign:Flipper.FrontContent>
Я надеюсь, что я достаточно ясно понимаю мою проблему, и надеюсь, что любой может помочь мне решить ее