- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在处理一个示例 MVVM Light 项目并正在实现 SimpleIoc ViewModelLocator。我已经能够构建一个 IRepositoryService,它从数据库(即公司、员工等)中检索信息并将信息存储到 ObservableCollection 中。 IRepositoryService 然后将 ObservableCollection 返回给 ViewModel。这是如何实现的:
public interface IRepositoryService
{
void GetCompanies(Action<ObservableCollection<Company>, Exception> callback);
void GetEmployees(Action<ObservableCollection<Employee>, Exception> callback);
}
class RepositoryService : IRepositoryService
{
public void GetCompanies(Action<ObservableCollection<Company>, Exception> callback)
{
using (var context = new SidekickEntities())
{
var _companies = from co in context.Companies
select co;
callback(new ObservableCollection<Company>(_companies), null);
}
}
public void GetEmployees(Action<ObservableCollection<Employee>, Exception> callback)
{
using (var context = new SidekickEntities())
{
var _employees = from co in context.Employees
select co;
callback(new ObservableCollection<Employee>(_employees), null);
}
}
}
然后在 ViewModel 中使用 RepositoryService:
public sealed class CompanyViewModel : ViewModelBase //, IPageViewModel
{
private readonly IRepositoryService _dataService;
private ObservableCollection<Company> _companyList;
/// <summary>
/// Initializes a new instance of the CompanyViewModel class.
/// </summary>
public CompanyViewModel(IRepositoryService dataService)
{
Console.WriteLine("CompanyViewModel DataService Constructor");
try
{
_dataService = dataService;
CompanyList = new ObservableCollection<Company>();
_dataService.GetCompanies(
(companies, error) =>
{
if (error != null)
{
return;
}
CompanyList = companies;
}
);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
public ObservableCollection<Company> CompanyList
{
get
{
return _companyList;
}
set
{
if (_companyList == value)
{
return;
}
_companyList = value;
RaisePropertyChanged(CompanyListPropertyName);
}
}
}
这一切都很好,允许我在 DataGrid 中显示数据,但我想知道将更改保存回数据库的方法是什么?
例如,如果我将以下内容添加到 CompanyViewModelConstructor() 的末尾,我将如何将新列表保存回数据库?我正在使用 Entity Framework 5.x 访问数据库。
CompanyList.Add(new Company(-1, "Chipotle", "1400 High Street", "", "Columbus", "OH", "43235"));
最佳答案
这是我的一个 View 模型的示例
class YearModel : INotifyPropertyChanged
{
#region Members
Year _year;
#endregion
#region Properties
public Year Year
{
get { return _year; }
}
public Int32 id
{
get { return Year.id; }
set
{
Year.id = value;
NotifyPropertyChanged("id");
}
}
public String Code
{
get { return Year.Code; }
set
{
Year.Code = value;
NotifyPropertyChanged("Code");
}
}
public String Description
{
get { return Year.Description; }
set
{
Year.Description = value;
NotifyPropertyChanged("Description");
}
}
public DateTime DateCreated
{
get { return Year.DateCreated; }
set
{
Year.DateCreated = value;
NotifyPropertyChanged("DateCreated");
}
}
public Int32 CreatedByID
{
get { return Year.CreatedByID; }
set
{
Year.CreatedByID = value;
NotifyPropertyChanged("CreatedByID");
}
}
public String CreatedByDesc
{
get { return Year.CreatedByDesc; }
set
{
Year.CreatedByDesc = value;
NotifyPropertyChanged("CreatedByDesc");
}
}
public DateTime DateEdited
{
get { return Year.DateEdited; }
set
{
Year.DateEdited = value;
NotifyPropertyChanged("DateEdited");
}
}
public Int32 EditedByID
{
get { return Year.EditedByID; }
set
{
Year.EditedByID = value;
NotifyPropertyChanged("EditedByID");
}
}
public String EditedByDesc
{
get { return Year.EditedByDesc; }
set
{
Year.EditedByDesc = value;
NotifyPropertyChanged("EditedByDesc");
}
}
#endregion
#region Construction
public YearModel()
{
this._year = new Year
{
id = 0,
Code = "",
Description = "",
DateCreated = new DateTime(1900, 01, 01, 00, 00, 00),
CreatedByID = 0,
CreatedByDesc = "",
DateEdited = new DateTime(1900, 01, 01, 00, 00, 00),
EditedByID = 0,
EditedByDesc = ""
};
}
#endregion
#region Property Change Events
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
#endregion
#region Commands
public ICommand EditCommand
{
get { return new RelayCommand(EditYear); }
}
public ICommand AddCommand
{
get { return new RelayCommand(AddYear); }
}
#endregion
#region Functions
public void EditYear()
{
try
{
Service1Client service = new Service1Client();
Year y = new Year();
y.id = this.id;
y.Code = this.Code;
y.Description = this.Description;
y.DateEdited = DateTime.Now;
y.EditedByID = (Int32)Application.Current.Resources["UserID"];
service.EditYear(y);
MessageBox.Show("Your Year was edited successfully", "Success", MessageBoxButton.OK);
}
catch (Exception ex)
{
logError le = new logError();
le.log(ex, "YearViewModel", "EDIT");
}
}
public void AddYear()
{
try
{
Service1Client service = new Service1Client();
Year y = new Year();
y.Code = this.Code;
y.Description = this.Description;
y.DateCreated = DateTime.Now;
y.CreatedByID = (Int32)Application.Current.Resources["UserID"];
y.DateEdited = this.DateEdited;
service.AddYear(y);
MessageBox.Show("Your new Year was entered successfully", "Success", MessageBoxButton.OK);
}
catch (Exception ex)
{
logError le = new logError();
le.log(ex, "YearViewModel", "ADD");
}
}
#endregion
}
<Button Content="Save New"
DataContext="{StaticResource ResourceKey=NewYear}"
Command="{Binding Path=AddCommand}"/>
class RelayCommand : ICommand
{
Action action;
public RelayCommand(Action execute)
{
action = execute;
}
public bool CanExecute(object parameter)
{
return true;
}
public event EventHandler CanExecuteChanged;
public void Execute(object parameter)
{
action();
}
}
关于c# - MVVM 光 : Using DataService to retrieve database items,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19060146/
我正在构建一个与其他微服务交互的新 RESTful 服务。 例行任务是从另一个 RESTful 服务获取一些数据,对其进行过滤,将其与现有数据进行匹配并返回响应。 我的问题是,始终将“获取数据”和“过
我们已经使用 WCF 数据服务构建了一个简单的 Web 服务。此服务由多个应用程序使用。 在某些情况下,我希望能够在服务器端检查插入的消息,并在插入的对象满足特定条件时取消插入。 我发现我可以使用 Q
我是 MVVM Light 的新手,我想知道如何使用 Messenger 和数据服务。 我有一个 dataService 类和方法 GetAll 从 DBF 文件加载数据。所有数据都显示在 DataG
我目前正在冒险进入 MvvmCross 领域并取得了一些良好进展,但遇到了一些我自己无法解决的问题。我目前有一个将一直运行的 Android 服务。该服务将在系统启动时或应用程序首次启动时启动。 该服
单击表单上的提交按钮时发生错误。 LoginController 和 controllerAs 在路由配置中定义 Angular 版本:AngularJS v1.3.11 dataService.js
我有一个 Angular 数据服务,如下所示: //dataservice.js export class DataService { constructor($rootScope, $htt
我正在尝试创建通用服务。我找到了这篇文章:https://medium.com/@krishna.acondy/a-generic-http-service-approach-for-angular-
我使用 WCF DataService 并想使用 POCO。 我必须指定一个 DataServiceKey 才能使其工作(显然)。 当我这样做时,我必须引用 System.Data.Services.
我在 DataService 上有一个简单的函数来获取 DateTime 参数 [WebGet] public IQueryable LoadJobsByDate(DateTime startDate
我想使用基于 ajax 的组件 (KendoUI) 来读取/修改 WCF DataServices 实现的 OData 端点上的实体。 首先,服务实现相当简单: public class MyFooS
目前我正在学习 AngularJS。我通过做测验应用程序教程来练习它。我陷入困境,因为在我将我的工厂之一注入(inject)我的 Controller 之一之后......我无法调用工厂的休息功能..
我有基于 ADO.NET 数据服务的 Windows 窗体应用程序和服务器端服务。在 Windows 应用程序中创建和初始化一个静态数据服务客户端并在整个程序中使用它是一种不好的做法吗?例如,我可以在
数据服务.swift 类数据服务 --> 类数据服务没有初始化器static let dataService = DataService() --> 数据服务不能构造是因为它没有可访问的初始化器 cl
我收到此错误并且我已经检查了所有导入和模块。 我正在尝试访问元素中的 JSON 文件并在对象中使用该数据,但我不确定这里的问题是什么。我用我的 JSON 很好地定义了我的对象,但我不确定问题出在 Ht
我通过数据服务公开了一些实体 (EF): - 比赛 -- 联赛 --- 团队 ---- 参加者 我通过以下方式检索比赛: proxy.races 要获取种族的嵌套属性,我使用如下扩展方法: proxy
我有一个 Web 应用程序,它通过代理调用 OData Webservice ( DataServiceContext )。问题是代码即使每次都调用 OData webservice,但它总是在内容管
我希望在我的项目中使用由 WCF DataServices 托管的 OData 端点,从 javascript 前端调用它。 JSON 对象上的属性名称必须遵循 Javascript 约定而不是 c#
我们已成功将 v2 QBO 迁移到 v3,之后在生产中我们遇到了一位客户的问题。他们的 QBO 帐户中有超过 100 名客户。他们想将它们复制到我们的应用程序中。我们实现了这样的导入: Dat
public class TestStartup : Startup { private readonly Mock _carServiceMock; public TestStart
我有一个 wcf DataService,我想使用自定义查询选项扩展 odata 查询语法。 具体来说,我正在尝试实现 $groupby 选项。有人这样做的唯一例子是来自 DevExpress 的 X
我是一名优秀的程序员,十分优秀!