2017-02-22 1 views
2

Newb hier, also bitte gehen Sie einfach ....WPF - Passing Daten von DAL nach UI

ich unterwegs ein WPF-Projekt haben, habe ich eine Datenzugriffsschicht geschaffen, und ich erhalte die Daten Ich benötige mit dem folgenden Code:

public static List<Model.CountryList> GetAllCountriesList() 
    { 

     SqlConnection connection = new DatabaseConnection().ConnectToBooze(); 
     SqlCommand cmd = new SqlCommand(); 
     SqlDataReader reader; 
     SqlDataAdapter da = new SqlDataAdapter(); 

     cmd.CommandText = "dbo.spGetAllCountries"; 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.Connection = connection; 

     connection.Open(); 

     reader = cmd.ExecuteReader(); 

     var CompanyList = new List<Model.CountryList>(); 

     while (reader.Read()) 
     { 
      while (reader.Read()) 
      { 
       var Cli = new Model.CountryList(); 
       Cli.CountryID = Convert.ToInt32(reader["CountryID"]); 
       Cli.CountryName = reader["CountryName"].ToString(); 
       //Add the country to Country List 
       CompanyList.Add(Cli); 
      } 
     } 
     //Return list 
     return CompanyList; 
    } 

Was ich mit bin bin zu kämpfen, wie gehe ich dies von der DAL meiner Präsentationsschicht? Was ich gedacht hatte war, eine 'Data'-Klasse auf der Präsentationsschicht zu erstellen, die die obige Methode von meinem DAL aufruft und diese Liste zurücksendet, aber ich bin mir nicht sicher, wie das geht, ohne die Typliste implizit in Liste umwandeln zu können 'Fehler, was ich versucht habe, war:

public static List<Model.CountryList> GetAllCountries() 
    {  
     return DataAccessLayer.DatabaseGets.GetAllCountriesList(); 
    } 

Vielen Dank für Ihre Hilfe.

+0

Was auch immer Code, den Sie mir ok zur Verfügung gestellt haben scheint. Kannst du etwas genauer sagen, welchen Fehler du siehst? Vielleicht posten ganzen Fehler? – Versatile

+0

OK, ich war ein Idiot. Ich verwendete ein anderes Modell in meiner Präsentationsschicht, daher der Fehler. Es wurde jetzt behoben, indem das Modell in der DAL vollständig referenziert wurde. Danke für Ihre Hilfe. – Leonidas199x

+0

Haben Sie Ihren Kommentar gleich nach dem Verfassen einer Antwort gesehen, froh, dass Sie es herausgefunden haben! – JSteward

Antwort

0

MVVM ist einfach eine Möglichkeit, Bedenken und IMHO ein verklärtes dreistufiges Datensystem zu trennen.

Wie übermittele ich dies von der DAL an meine Präsentationsebene?

Ort/lesen Sie die Daten in die VM der MVVM und verbrauchen sie aus dem Blick, der mit seinen gebundenen Kontrollen auf der Ansicht, jeden Ladens über INotifyPropertyChange von der VM (alle im Hintergrund) benachrichtigt werden .

Sehen Sie mein Blog-Artikel auf MVVM zum Einstieg: Xaml: ViewModel Main Page Instantiation and Loading Strategy for Easier Binding

3

Durch meine lesen Sie Ihre mehr über Architektur als jeder Fehler zu fragen. In diesem Sinne würde ich sagen, dass der von Ihnen bereitgestellte Code wirklich Teil eines Repositorys ist. Dieses Repository würde eine Schnittstelle implementieren, die Sie woanders definiert haben und die in jedes Ansichtsmodell eingefügt wird, das diese Fähigkeit benötigt.

Ein vereinfachtes Schichtdiagramm könnte sein:

UI -> ViewModel -> Model <- DAL 

namespace MyApp.Model 
{ 
    public interface IMyRepo 
    { 
     IEnumerable<Model.CountryList> GetAllCountries(); 
    } 
} 

namespace MyApp.DAL 
{ 
    public class MyRepo : IMyRepo 
    { 
     IEnumerable<Model.CountryList> GetAllCountries() 
     { 
      /** 
      data access 
      **/ 
     } 
    } 
} 

namespace MyApp.ViewModel 
{ 
    public class MainViewModel : ViewModelBase 
    { 
     public MainViewModel(IMyRepo repo) 
     { 
       this.Repo = repo; 
     } 
    } 
} 
+0

Das ist großartig, danke – Leonidas199x