我正在使用 .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。好的,我的项目中有一个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)