c# - C# WinForms 数据绑定参数异常
问题描述
我正在为 WinForms 数据绑定而苦苦挣扎。问题是控件应该绑定到模型,但它们只是在ArgumentException
没有任何合理理由的情况下抛出。它恰好在 aTabPage
显示有问题的控件时被抛出。这是以下内容Exception.Message
:无法链接数据源中的属性或 Mpn 列。
所以,我无法弄清楚出了什么问题。好像没问题。
值得一提的是,我正在对 WinForms 实施“强制”MVVM,并且该模式到目前为止运行良好(哈哈!)。我已经知道 MVVM 更适合 WPF 和 Silverlight,所以请关注这个问题。
我留下下面的代码和一些关于它们是如何组成的解释:
视图:它有一个TabControl
内部有许多选项卡的页面,并且这些页面TabPage
具有控件,例如:Labels
、TextBox
等ComboBox
。
public sealed partial class ProductView : ViewBase
public ProductView(ProductViewModel viewModel) : base(viewModel) => InitializeComponent();
public sealed async override void BindViewModel()
{
ProductViewModel pvm = ViewModel as ProductViewModel;
await Task.Run(() => { while (pvm.Loading) ; });
DataSourceUpdateMode updateMode = DataSourceUpdateMode.OnPropertyChanged;
// Product Tab Data
materialTextField_mpn.DataBindings.Add("Text", pvm, nameof(pvm.Product.Mpn), false, updateMode);
}
private void ProductView_Load(object sender, EventArgs e){
(ViewModel as ProductViewModel).Load.Execute(null);
BindViewModel();
}
}
视图模型
public sealed class ProductViewModel : ViewModelBase
{
private bool loading;
private int product_id;
private readonly IRepository<ProductModel> repository;
private ICommand load;
public ProductViewModel(IRepository<ProductModel> repository) => this.repository = repository;
public ProductModel Product { get; private set; }
private async void LoadData()
{
Loading = true;
product_id = 0; // Hardcoded for testing purposes.
Product = product_id > 0 ? await repository.GetByIdAsync(product_id) : new ProductModel()
{
ID = 0,
Mpn = string.Empty
};
Loading = false;
}
模型
public class ProductModel : ModelBase
{
private string mpn;
public string Mpn {
get => mpn;
set
{
if (mpn == value)
return;
mpn = value;
OnPropertyChanged(nameof(mpn));
}
}
}
提前谢谢了!
更新和解决方案
睡了一会儿,回来写代码。我意识到数据绑定是错误的。尤其是这一行:
materialTextField_mpn.DataBindings.Add("Text", pvm, nameof(pvm.Product.Mpn), false, updateMode);
只需更改这个:
materialTextField_mpn.DataBindings.Add("Text", pvm.Product, nameof(pvm.Product.Mpn), false, updateMode);
不要像我一样做傻瓜哈哈!
解决方案
推荐阅读
- simulation - 模型创建期间出错 无法创建 NativeRL 处理器。原因:在 Anylogic 中的 airport10.Main.actions 类中找不到本地类
- vue.js - 如何将服务工作者中的事件接收到的数据导出到vue组件?
- mysql - docker - 如何将 mysql 数据从本地迁移到 ec2 实例
- anaconda - Anaconda 安装的 PyTorch 在尝试访问 GPU 时抛出运行时错误
- javascript - 验证时如何一次发送多个错误?
- python - 使用 Discord.py 机器人运行 Flask/Quart 应用程序
- javascript - innerHTML 更改为更长的文本后,段落不可滚动?
- sql - 表中的 SQL 行具有相等的概率
- icons - 关于 PageSpeed Insights 上的图标的问题
- c# - Blazor 不会在类更改时重新渲染