Heyho,
habe mir gedacht, ich bastel mir aus Spaß eine kleine Warenwirtschaft nach besten MVVM-manieren, um da endlich mal durchzublicken
Grundstruktur steht, sprich RelayCommand, Navigation, Models, ViewModels und Views...
Jetzt bekomme ich aber mir unerklärliche Fehler...?
Zum einem kann ich auf einmal mein Haupt-ViewModel nicht mehr als DataContext festlegen...siehe Bild1. In diesem ViewModel habe ich nur eine Eigenschaft und den Konstruktur, der mir meine Navigation bastelt:
Spoiler anzeigen
Ebenfalls möchte mein MainWindow auch nicht mehr funktionieren...siehe Bild2.
Spoiler anzeigen
Und zu all dem sagt er mir noch, er kann die Klassenbibliothek, welche die Logik enthällt, nicht finden...Kann diese nicht mal kompilieren..
Auch sagt er mir sporadisch, dass es keine Methode "Query" geben würde (von Dapper).
Spoiler anzeigen
Und zum Schluss eine Verständnisfrage
Ich habe all meinen VM's ein Interface spendiert zur Navigation (IPageViewModel) mit nur einer, sinnlosen, Eigenschaft "Name". Anhand dessen Zeige ich die entprechende View an über ein ContentControl sowie DataTemplates. Habe mir dazu eine simple Klasse zur Hierachiebildung geschrieben:
Spoiler anzeigen
Ändere ich nun die Eigenschaft ViewModel dieser Klasse vom Typ IPageViewModel auf Type (sodass ich dann GetType(ViewModel) aufrufen kann), funktioniert die ganze Navigation nur so "halb". Er navigiert schon auf das richtige ViewModel, zeigt mir aber quasi nur ViewModel.ToString() an statt die eigentliche View. Hoffe das ist verständlich.
Ich bin um jeden Hinweis sehr dankbar
habe mir gedacht, ich bastel mir aus Spaß eine kleine Warenwirtschaft nach besten MVVM-manieren, um da endlich mal durchzublicken
Grundstruktur steht, sprich RelayCommand, Navigation, Models, ViewModels und Views...
Jetzt bekomme ich aber mir unerklärliche Fehler...?
Zum einem kann ich auf einmal mein Haupt-ViewModel nicht mehr als DataContext festlegen...siehe Bild1. In diesem ViewModel habe ich nur eine Eigenschaft und den Konstruktur, der mir meine Navigation bastelt:
VB.NET-Quellcode
- Imports System.Collections.ObjectModel
- Namespace ViewModels
- Public Class MainWindowViewModel
- Private _TreeViewItems As ObservableCollection(Of TreeViewNavigation)
- Property TreeViewItems As ObservableCollection(Of TreeViewNavigation)
- Get
- Return _TreeViewItems
- End Get
- Set(value As ObservableCollection(Of TreeViewNavigation))
- _TreeViewItems = value
- End Set
- End Property
- Sub New()
- TreeViewItems = New ObservableCollection(Of TreeViewNavigation)
- 'Erste Gruppe
- Dim Stammdaten As New TreeViewNavigation("Stammdaten")
- Dim StammdatenAnlegen As New TreeViewNavigation("Stammdaten anlegen")
- StammdatenAnlegen.Add(New TreeViewNavigation("Kunden") With {.ViewModel = New CustomerViewModel})
- StammdatenAnlegen.Add(New TreeViewNavigation("Artikel"))
- StammdatenAnlegen.Add(New TreeViewNavigation("Warengruppen"))
- Stammdaten.Add(StammdatenAnlegen)
- Stammdaten.Add(New TreeViewNavigation("Kunden") With {.ViewModel = New CustomerListViewModel})
- Stammdaten.Add(New TreeViewNavigation("Artikel"))
- Stammdaten.Add(New TreeViewNavigation("Warengruppen"))
- Dim Vorgänge As New TreeViewNavigation("Vorgänge")
- Dim VorgangAnlegen As New TreeViewNavigation("Vorgang anlegen")
- VorgangAnlegen.Add(New TreeViewNavigation("Angebot"))
- VorgangAnlegen.Add(New TreeViewNavigation("Auftragsbestätigung"))
- VorgangAnlegen.Add(New TreeViewNavigation("Rechnung"))
- Vorgänge.Add(VorgangAnlegen)
- TreeViewItems.Add(Stammdaten)
- TreeViewItems.Add(Vorgänge)
- End Sub
- End Class
- End Namespace
Ebenfalls möchte mein MainWindow auch nicht mehr funktionieren...siehe Bild2.
XML-Quellcode
- <Window x:Class="MainWindow"
- 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:Warenwirtschaft.UI"
- xmlns:VM="clr-namespace:Warenwirtschaft.Logik.ViewModels;assembly=Warenwirtschaft.Logik"
- xmlns:views="clr-namespace:Warenwirtschaft.Logik.Views;assembly=Warenwirtschaft.Logik"
- mc:Ignorable="d"
- Title="Warenwirtschaft" Height="720" Width="1280">
- <Window.DataContext>
- <VM:MainWindowViewModel />
- </Window.DataContext>
- <Window.Resources>
- <DataTemplate DataType="{x:Type VM:CustomerViewModel}">
- <views:CustomerView />
- </DataTemplate>
- <DataTemplate DataType="{x:Type VM:CustomerListViewModel}">
- <views:CustomerListView />
- </DataTemplate>
- </Window.Resources>
- <Grid>
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="2*" />
- <ColumnDefinition Width="8*" />
- </Grid.ColumnDefinitions>
- <TreeView Grid.Column="0" Name="tvNavgiation" FontSize="14" ItemsSource="{Binding Path=TreeViewItems}">
- <TreeView.ItemTemplate>
- <HierarchicalDataTemplate ItemsSource="{Binding Path=SubTreeViewNavigation}">
- <TextBlock Text="{Binding DisplayName}" />
- </HierarchicalDataTemplate>
- </TreeView.ItemTemplate>
- </TreeView>
- <ScrollViewer Grid.Column="1" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
- <ContentControl Content="{Binding ElementName=tvNavgiation, Path=SelectedItem.ViewModel}" />
- </ScrollViewer>
- </Grid>
- </Window>
Und zu all dem sagt er mir noch, er kann die Klassenbibliothek, welche die Logik enthällt, nicht finden...Kann diese nicht mal kompilieren..
Auch sagt er mir sporadisch, dass es keine Methode "Query" geben würde (von Dapper).
VB.NET-Quellcode
- Imports Dapper
- Imports Warenwirtschaft.Logik.Models
- Imports System.Configuration
- Imports System.Data.Common
- Imports System.Data.SqlClient
- Public Class SqlDataAccess
- Private Shared Function GetConnection() As DbConnection
- Return New SqlConnection(ConfigurationManager.ConnectionStrings("WaWiDb").ConnectionString)
- End Function
- Shared Function GetCustomers() As List(Of CustomerModel)
- Const Sql = "SELECT * FROM Address"
- Using con = GetConnection()
- Return con.Query(Of CustomerModel)(Sql)
- End Using
- End Function
- End Class
Und zum Schluss eine Verständnisfrage
Ich habe all meinen VM's ein Interface spendiert zur Navigation (IPageViewModel) mit nur einer, sinnlosen, Eigenschaft "Name". Anhand dessen Zeige ich die entprechende View an über ein ContentControl sowie DataTemplates. Habe mir dazu eine simple Klasse zur Hierachiebildung geschrieben:
VB.NET-Quellcode
- Imports System.Collections.ObjectModel
- Imports Warenwirtschaft.Logik.Interfaces
- Public Class TreeViewNavigation
- Private _SubTreeViewNavigation As ObservableCollection(Of TreeViewNavigation)
- Property SubTreeViewNavigation As ObservableCollection(Of TreeViewNavigation)
- Get
- Return _SubTreeViewNavigation
- End Get
- Set(value As ObservableCollection(Of TreeViewNavigation))
- _SubTreeViewNavigation = value
- End Set
- End Property
- Private _DisplayName As String
- Property DisplayName As String
- Get
- Return _DisplayName
- End Get
- Set(value As String)
- _DisplayName = value
- End Set
- End Property
- Private _ViewModel As IPageViewModel
- Property ViewModel As IPageViewModel
- Get
- Return _ViewModel
- End Get
- Set(value As IPageViewModel)
- _ViewModel = value
- End Set
- End Property
- Sub New(ByVal Name As String)
- Me.DisplayName = Name
- SubTreeViewNavigation = New ObservableCollection(Of TreeViewNavigation)
- End Sub
- Sub Add(ByVal item As TreeViewNavigation)
- SubTreeViewNavigation.Add(item)
- End Sub
- End Class
Ändere ich nun die Eigenschaft ViewModel dieser Klasse vom Typ IPageViewModel auf Type (sodass ich dann GetType(ViewModel) aufrufen kann), funktioniert die ganze Navigation nur so "halb". Er navigiert schon auf das richtige ViewModel, zeigt mir aber quasi nur ViewModel.ToString() an statt die eigentliche View. Hoffe das ist verständlich.
Ich bin um jeden Hinweis sehr dankbar