小编Jul*_*aro的帖子

从视图模型更新记录的正确方法是什么?

仍在使用我的第一个UWP/MVVM/EF Core应用程序.

我不希望我的viewmodels对DbContext有任何了解.所以我创建了以下ItemService类,注入到我的视图模型中.

public class ItemService : IItemService
{
    public async Task SaveAsync(Item item)
    {
        using (var db = new MyDbContext())
        {
            db.Items.Add(item);
            await db.SaveChangesAsync();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的ItemViewModel包含以下命令:

public RelayCommand SaveCommand { get; private set; }

private async void Save()
{
    if (!SaveCommand.CanExecute(Item))
        return;

    await ItemService.SavAsync(Item);
}
Run Code Online (Sandbox Code Playgroud)

保存项目时这很有用.SaveAsync方法创建DbContext的新实例,添加刚刚创建的项,然后将更改提交到数据库.

我的问题是关于更新现有记录.我想这样的事情:

public class ItemService : IItemService
{
    public async Task UpdateAsync(Item item)
    {
        using (var db = new MyDbContext())
        {
            Item dbItem = (from i in db.Items
                           where i.Id = item.Id …
Run Code Online (Sandbox Code Playgroud)

c# mvvm entity-framework-core uwp

6
推荐指数
1
解决办法
454
查看次数

Xamarin 和托管可扩展性框架 (MEF)

我正在考虑一个新的移动/平板电脑应用程序。

我想让用户开发自己的插件。

想象一下在 Android 平板电脑上运行的收银台应用程序。用户在连接到信用卡读卡器时可以使用许多替代方法(SquareSum'Up、...)。

如果我的应用程序是旧的 Win32,我只会发布一个 API,然后让SquareSum'Up开发人员创建一个 DLL。然后,这个 DLL 将被放置在计算机上的某个地方。在应用程序启动时,我只需要查找那些 DLL 并动态加载它们。

事实上,真正的问题是:是否可以创建基于插件的应用程序?我在这里考虑托管可扩展性框架。许多问题浮现在脑海:

  • 如何部署这些插件?
  • 这是否适用于所有平台(iOS、Android、UWP)?
  • ...

我找不到任何关于此的文档。

非常感谢您的想法和指示。

plugins mef xamarin

5
推荐指数
1
解决办法
272
查看次数

单元测试棱镜导航

我正在使用Prism和Xamarin Forms创建一个应用程序。我想对视图模型进行单元测试。

我有一个导航到页面的命令。我想断言在该命令被调用后导航发生在正确的页面上。

我想我需要复制在Prism / Source / Xamarin / Prism.Forms.Tests / Navigation / PageNavigationServiceFixture.cs文件中找到的代码。

例如,查看此方法(来自PageNavigationServiceFixture类):

    public async void Navigate_ToContentPage_ByName()
    {
        var navigationService = new PageNavigationServiceMock(_container, _applicationProvider, _loggerFacade);
        var rootPage = new Xamarin.Forms.ContentPage();
        ((IPageAware)navigationService).Page = rootPage;

        await navigationService.NavigateAsync("ContentPage");

        Assert.True(rootPage.Navigation.ModalStack.Count == 1);
        Assert.IsType(typeof(ContentPageMock), rootPage.Navigation.ModalStack[0]);
    }
Run Code Online (Sandbox Code Playgroud)

它创建导航服务,导航到页面,然后断言该页面已更改。

现在这是我的测试课:

[TestClass]
public class MenuPrincipalViewModelTests
{
    [TestMethod]
    public void AProposCommand()
    {
        INavigationService navigationService = new PageNavigationServiceMock(_container, _applicationProvider, _loggerFacade);

        // 1: Here I need to initialize my navigation service to my MasterDetailPage

        MenuPrincipalPageViewModel viewModel = …
Run Code Online (Sandbox Code Playgroud)

navigation unit-testing prism

2
推荐指数
1
解决办法
1230
查看次数

DbContext的良好用法

我正在使用EntityFramework创建我的第一个应用程序.我正在使用Entity Framework Core和MVVMLight.

我创建了一个DbContext后代类.我想知道何时实现这个DbContext.

我的第一个想法是为每个View创建1个实例.

想象一下以下场景:

  • 我有一个Item类
  • 我创建了一个ItemsViewModel来管理项目列表.在这个viewModel中,我为DbContext添加了一个属性
  • 当用户双击某个项目时,它将显示在与ItemViewModel关联的详细视图中.此视图模型还具有我的DbContext的实例.

当用户退出详细信息视图时:

  • 如果他保存,我更新列表的DbContext
  • 如果他取消了,则不必更新列表

这是一种正确的做事方式吗?我已经读过某个地方应该只有一个DbContext实例.但在这种情况下,即使细节视图被取消,对细节视图的每个修改都会传播到列表视图.

很多人都喜欢听

c# entity-framework mvvm entity-framework-core

1
推荐指数
1
解决办法
900
查看次数