我有一个小型 WPF / .NET 应用程序,并通过
System.Data.Entity
连接到 SQLite 数据库。 MainWindow
有一个按钮和一个文本框。
单击按钮时,必须将具有 id 的新元素添加到数据库中。它可以正确工作并更新数据网格。但如果当前 id 的元素已经存在,则 count 必须递增。此更改正确应用于数据库,但不适用于数据网格。
仅当我向下滚动直到它隐藏并将其恢复时,数据网格值才会更新。如何正确修复?
MainWindow.xaml.cs
代码如下:
public partial class MainWindow : Window
{
private ProductContext _context;
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Product newProduct = new Product() {
Id = idTextBox.Text,
Count = 1
};
Product oldProduct = _context.Products.Find(newProduct.Id);
if(oldProduct!= null)
oldProduct.Count++;
else
_context.Products.Add(newProduct);
_context.SaveChanges();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
_context = new ProductContext();
_context.Products.Load();
dataGrid.ItemsSource = _context.Products.Local;
}
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
_input.Dispose();
}
}
MainWindow.xaml
中DataGrid的代码:
<DataGrid AutoGenerateColumns="False" Name="dataGrid">
<DataGrid.Columns>
<DataGridTextColumn Header="ID" Binding="{Binding Id}"/>
<DataGridTextColumn Header="COUNT" Binding="{Binding Count}"/>
</DataGrid.Columns>
</DataGrid>
数据库上下文:
public partial class ProductContext : DbContext
{
public DbSet<Product> Products { get; set; }
public ProductContext () : base("name=ProductDB") { }
}
产品:
public class Product
{
public string Id { get; set; }
public int Count { get; set; }
}
我尝试添加
_context.Products.Load()
和其他一些不好的内容,但没有任何改变。
PS:如果我在与数据库通信时从根本上做错了什么,我将非常感谢您的建议
我很偶然地找到了一个解决方案。如果类
Product
实现 INotifyPropertyChanged
接口,则数据网格会正确更新
public class Product : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public string Id { get; set; }
private int _count;
public int Count
{
get
{
return _count;
}
set
{
_count = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Count)));
}
}
}