Grundsätzlich muss ich zwei ObservableCollections
, wie zum Beispiel eine Product
und BrandInfo
verbinden, wo das Modell eine inoffiziell definierte foreign key
zu BrandInfo
hat. Diese Modelle verwenden Sqlite-Net
für Datenpersistenz.Wie kann man zwei Tabellen in GridView erstellen?
Ich möchte die Kombination der beiden in einer GridView
anzeigen, die die Grundlage für zukünftige Datenbearbeitung auf anderen Xaml
Bildschirme sein wird.
Meine aktuelle Einrichtung hat Daten durch eine viewModel
Klasse gebunden, die Daten über das Product
Modell erwerben. Die viewModel
hat eine ObservableCollection
Instanz von Product
und funktioniert ordnungsgemäß.
Von dem, was ich lese, kann ich brauche CompositeCollection
zu verwenden oder möglicherweise ein Modell erstellen, das die join
von Product
und BrandInfo
darstellt. Betrachtet man Sqlite-Net
nicht unterstützt Fremdschlüssel wie Entity Framework
und andere ORM's
tun, bin ich nicht wirklich sicher, wie man mit CompositeCollection
gehen. Ich bin mir auch nicht sicher, ob es eine gute Idee ist, eine nicht in der Datenbank gespeicherte Kombination der beiden Modelle zu machen. Irgendein Rat oder Schnipsel kann einen langen Weg bringen, um mir zu helfen!
Vielen Dank im Voraus!
Einige Code:
MainWindowViewModel.cs
using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Command;
using StoreFront.Models;
using StoreFront.Services;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StoreFront.ViewModels {
public class MainWindowViewModel : ViewModelBase,IMainViewModel {
private IDataService dataService;
IDialogService dialogService;
IStorageService storageService;
public MainViewModel(IDataService dataService, IStorageService storageService) {
this.dataService = dataService;
this.storageService = storageService;
RefreshAsync(); //Basically fills the product ObservableCollection with data.
}
private ObservableCollection<Product> product = new ObservableCollection<Product>();
public ObservableCollection<Product> Product {
get {
return product;
}
}
}
Product.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SQLite;
namespace StoreFront.Models {
public class Product {
[PrimaryKey, AutoIncrement]
public int Id { get; set;}
public string ItemName { get; set;}
public double Price { get; set;}
public int BrandInfoFK { get; set;}
}
}
BrandInfo.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SQLite;
namespace StoreFront.Models {
public class BrandInfo {
[PrimaryKey, AutoIncrement]
public int Id { get; set;}
public string BrandName { get; set;}
public string Description { get; set;}
}
}
Die Art, wie ich sehe, dass viewModels verwendet werden, bezieht sich auf die Benutzeroberfläche, nicht unbedingt auf die Modelle. Was ich meine, ist, dass es in der Regel ein 1 zu 1 Verhältnis mit Ihrer UI und ViewModels gibt (d. H. 'MainWindowViewModel' und' DetailsViewModel' mit 'MainWindow.xaml' und' DetailsWindow.xaml'). Dieser Leckerbissen von Informationen hat Laurent, der Schöpfer von MVVM-Light, in seinen PluralSight-Vorträgen gesagt. Das gesagt, ich bin für alles bereit, wenn es ein Beispiel gibt, das ich sehen konnte. Ich werde versuchen, einen Code als Referenz hinzuzufügen. Ich entschuldige mich dafür, dass ich das nicht früher getan habe. –
@Steven_BDawg Ich stimme nicht mit allem überein, was du gesagt hast :).Jetzt, da Sie Ihren Code eingegeben haben, habe ich Ihre Frage in Bezug auf das, was Sie darstellen wollten, falsch verstanden, als Sie sagten, Sie wollten eine Kombination der Elemente anzeigen. Möchten Sie grundsätzlich ein Raster mit einem Produkt pro Zeile anzeigen, dessen Spalten "Artikelname", "Preis", "Markenname" und "Beschreibung" repräsentieren? Mit anderen Worten, wollten Sie INNER JOIN die Tabellen und setzen Sie es in das Raster? – Rowbear
Ja innerer Join mit mit den Abfrageergebnisdaten bindefähig! : D –