Wie fülle ich einen ListView aus einer Datenbank mit dem MVVM-Muster? Ich bevorzuge das EntityFramework, aber momentan mache ich das mit einem SQLAdapter, also wäre ich schon mit einer funktionierenden Lösung zufrieden.Wie fülle ich einen ListView aus einer Datenbank mit dem MVVM-Muster?
Ich habe eine Klassenbibliothek, die ich Modelle nenne. Diese libary enthält eine Klasse ProjectCompletedModel.vb
Public Class ProjectCompletedModel
' Read this article if the Auto-Implemented Properties do not match your needs:
' https://msdn.microsoft.com/de-de/library/dd293589.aspx
''' <summary>
''' Get or set the project number.
''' </summary>
''' <value>Set the project number</value>
''' <returns>Get the project number</returns>
''' <remarks></remarks>
Public Property ProjectNumber As String
''' <summary>
''' Get or set the project name.
''' </summary>
''' <value>Set the project name</value>
''' <returns>Get the project name</returns>
''' <remarks></remarks>
Public Property ProjectName As String
''' <summary>
''' Get or set the customer name.
''' </summary>
''' <value>Set the customer name</value>
''' <returns>Get the customer name</returns>
''' <remarks></remarks>
Public Property CustomerName As String
End Class
Next Ich habe eine Klasse libary Viewmodel genannt. Es enthält die Klasse ProjectCompletedViewModel.vb
Imports System.Collections.ObjectModel
Public Class ProjectCompletedViewModel
Private projCompleted As New Models.ProjectCompletedModel
Public Property Projects As ObservableCollection(Of Models.ProjectCompletedModel)
Public Property ProjectNumber As String
Get
Return Me.projCompleted.ProjectNumber
End Get
Set(value As String)
Me.projCompleted.ProjectNumber = value
End Set
End Property
Public Property ProjectName As String
Get
Return Me.projCompleted.ProjectName
End Get
Set(value As String)
Me.projCompleted.ProjectName = value
End Set
End Property
Public Property CustomerName As String
Get
Return Me.projCompleted.CustomerName
End Get
Set(value As String)
Me.projCompleted.CustomerName = value
End Set
End Property
End Class
Der Code für meine Ansicht, die die Folowing ist:
<UserControl x:Class="ProjectCompletedView"
x:Name="WpfUserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:vm="clr-namespace:ViewModels;assembly=ViewModels"
mc:Ignorable="d"
d:designheight="400" d:designwidth="400" Background="#D7E4F2" d:DesignWidth="918" d:DesignHeight="478"
>
<UserControl.Resources>
<vm:ProjectCompletedViewModel x:Key="projComplObj"/>
</UserControl.Resources>
<UserControl.DataContext>
<vm:ProjectCompletedViewModel/>
</UserControl.DataContext>
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="2*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="3*"/>
</Grid.RowDefinitions>
<ListView x:Name="lvProjects" Grid.ColumnSpan="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="0,52,0,0" Grid.RowSpan="2">
<!-- Define the column names -->
<ListView.View>
<GridView>
<GridViewColumn Header="ProjectNumber" Width="100" DisplayMemberBinding="{Binding ProjectNumber}"/>
<GridViewColumn Header="ProjectName" Width="100" DisplayMemberBinding="{Binding ProjectName}"/>
<GridViewColumn Header="Customer" Width="100" DisplayMemberBinding="{Binding CustomerName}"/>
</GridView>
</ListView.View>
</ListView>
</Grid>
</UserControl>
Es führt zu folgendem Entwurf durch einige hart codierte Werte im Konstruktor der .xaml.vb Hinzufügen Datei.
Me.lvProjects.Items.Add(New ViewModels.ProjectCompletedViewModel() With {.ProjectNumber = "",
.ProjectName = "Alpha",
.CustomerName = "AlphaCustomer"})
Ziel ist es, Gruppe Kunden oder jede Spalte, die ist, warum ich mit einem Listview arbeiten möchten. Es macht nichts mit der Gruppierung zu tun, für die ich bereits den Code habe. Meine erste Ausgabe ist das Laden der ListView aus der DataBase mit MVVM.
Meine Anwendung verweist auf ViewModels. ViewModels hat einen Verweis auf Models.
sieht wie folgt aus:
Ich bin in der Lage, die Listview mit Codebehind zu füllen, indem eine Datentabelle erzeugen und die DataTable.DefaultView zum ListView.ItemSource zuweisen. Mit der Option "DisplayMemberBinding = {Binding TableName}" kann ich meine Daten sehr schnell und einfach anzeigen. Aber ich möchte es wiederverwendbar und wartbar halten. => MVVM.
Mit Hilfe von diesem Kerl hier http://StackOverflow.com/Questions/14179967/Fill-ObservableCollection-Directly-from-SQL-Server Ihre Anweisungen haben mich dieses Problem zu lösen. Vielen Dank! Sie können es einfach in VB.NET anpassen. Ändern Sie einfach base.DataContext = ".." zu Me.DataContext = New ViewModel. –
Danke, ich werde meine Antwort aktualisieren, um die Kontextbindung einzubinden. –