WPF - 将数据从DAL传递到UI

时间:2017-02-22 20:56:24

标签: c# wpf mvvm

Newb,所以请放轻松......

我有一个WPF项目,我已经创建了一个数据访问层,我使用以下代码获取了我需要的数据:

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;   
    }

我正在努力的是,如何将其从DAL传递到我的表示层?我曾想过要创建一个数据&#39;表示层上的类,从我的DAL调用上面的方法并返回此列表,但是,我不确定如何执行此操作而不必将类型列表隐式转换为列表&#39;错误,我试过的是:

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

感谢您的指导。

1 个答案:

答案 0 :(得分:3)

通过我阅读你的更多关于架构的问题而不是任何错误。考虑到这一点,我说你提供的代码实际上是某个存储库的一部分,该存储库将实现一个你在其他地方定义的接口,它将被注入任何需要该功能的视图模型。

简化的图层图可以是:

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;
         }
    }
}