小编Joe*_*e K的帖子

WPF 中页面视图模型的依赖注入

我正在使用 .NET core 3.1 创建一个 WPF 应用程序,我过去开发过 ASP.Net 应用程序,我很高兴在 WPF 中使用它。我做了一些搜索,发现 WPF 中的 DI 并不像 ASP.Net 中那样简单,这意味着您必须注册视图和视图模型。

我的结构是这样的

MainWindow
|---BalanceIntegrationPage
   |---BalanceIntegrationViewModel
Run Code Online (Sandbox Code Playgroud)

一切都在 XAML 中处理,MainWindow.xaml.cs 仅生成代码,而 BalanceIntegrationPage.xaml.cs 在构造函数中添加了一行

DataContext = new ScaleIntegrationViewModel();  
Run Code Online (Sandbox Code Playgroud)

这无法在 xaml 中处理,因为 DI 需要构造函数中的参数。

这是我的 app.xaml.cs:

protected override async void OnStartup(StartupEventArgs startupEventArgs)
        {
            base.OnStartup(startupEventArgs);
            ServiceCollection services = new ServiceCollection();
            services.AddScoped<MainWindow>();
            services.AddScoped<ScaleInterfacePage>();
            services.AddScoped<ScaleIntegrationViewModel>();
            services.AddScoped<IScale>(provider => new Scale("1234"));

            ServiceProvider serviceProvider = services.BuildServiceProvider();
            MainWindow mainWindow = serviceProvider.GetService<MainWindow>();
            mainWindow.Show();

        }
Run Code Online (Sandbox Code Playgroud)

我的 ScaleIntegrationViewModel 看起来像:

public ScaleIntegrationViewModel(IJMDataIntegration jmContext = null, IBalanceIntegrationContext localContext = null, …
Run Code Online (Sandbox Code Playgroud)

c# wpf dependency-injection mvvm .net-core-3.1

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

将新的 Datagrid 行保存到数据库

在工作C# WPF。好的,我的项目中有一个datagrid绑定到一个entity framework。数据网格在更新显示的值时功能很棒。我将更改推送到database使用 中MyDataEntity.SaveChanges(),一切都运行良好。

添加新行时会出现此问题。我已CanUserAddRows="True"在 XAML 中进行设置,以便用户能够添加新行。当我必须将新行保存到数据库时,问题就出现了。由于某种原因,该SaveChanges()调用不会更新数据库。我尝试做的是将当前行的所有值拉入一个IList,然后访问各个值,以便我可以调用MyDataEntities.Add()' on theRowEditEnding` 事件,但这会带来一些其他问题。主要是,我无法访问 IList 中的各个值。当我查看列表中的数据时,它就在那里,我已经看到了它,我只是无法将它分配给任何东西。

事实上,我的问题有两个方面。

1:如何将新输入的行保存到我的数据库中

2:如何访问IList中的值

2 将是一个更好的解决方案,因为这样我可以使用以下代码填充数据库中的其他列,并将数据传递给其他方法以获取数据库中特定列的值。

private void DataGrid_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
{
    IList rows = DataGrid.SelectedItems;
    TableName tbl = new TableName
    {
        Name = rows[1].ToString(),
        Qty = decimal.Parse(rows[4].ToString()),
        Type = rows[6].ToString(),
        TQty = ConvertQtoT(rows[4].ToString(), rows[6].ToString(),
        OnLIst = true
    };

        MyDataEntity.TableNames.Add(tbl);
        MyDataEntity.TableNames.SaveChanges(); 
    }
}
Run Code Online (Sandbox Code Playgroud)

c# wpf datagrid ilist entity-framework

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