gpt4 book ai didi

c# - 将元素插入源后 WPF DataGrid 不更新

转载 作者:太空宇宙 更新时间:2023-11-03 11:32:01 24 4
gpt4 key购买 nike

我是 WPF 新手。我尝试做一个与我的 Entity Framework 模型表绑定(bind)的 DataGrid。我的表的名称是:单词。我正在尝试做简单的字典。我正在使用 SQL Server Compact、WPF、 Entity Framework 。

但是,从表中删除记录后它工作正常...来自 DataGrid desapers 的行

你能告诉我为什么在将记录添加到实体后它们没有插入到 DataGrid 中吗?关闭程序并再次打开后,记录在 DataGrid 中。

这是我的 DataGrid 窗口代码:

<Grid>

<Grid>
<DataGrid IsReadOnly="True" AutoGenerateColumns="False" Name="dataGrid" DataContext="{Binding }" ItemsSource="{Binding}" Margin="0,90,0,0">
<DataGrid.Columns>
<DataGridTextColumn Header="Sentence" Binding="{Binding Path=sentence}" />
<DataGridTextColumn Header="Translation" Binding="{Binding Path=translation}" />
<DataGridTemplateColumn Header="Operations">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="Delete" Click="Button_Click" Tag="{Binding Path=id}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
<TextBox Height="23" HorizontalAlignment="Left" Margin="12,12,0,0" Name="sentence" VerticalAlignment="Top" Width="153" />
<TextBox Height="23" Margin="171,12,131,0" Name="translations" VerticalAlignment="Top" AcceptsReturn="True" />
<Button Content="Add" Height="23" HorizontalAlignment="Left" Margin="90,41,0,0" Name="addBtn" VerticalAlignment="Top" Width="75" Click="addBtn_Click" />
</Grid>

这是我的 C# 代码:

public partial class AddWordWnd : Window {
static dbEntities db = new dbEntities();

public AddWordWnd() {
InitializeComponent();
dataGrid.DataContext = db.Words;
dataGrid.Visibility = System.Windows.Visibility.Visible;
}

private void Button_Click( object sender, RoutedEventArgs e ) {
Button btn = sender as Button;
System.Guid ii = System.Guid.Parse(btn.Tag.ToString());
MessageBox.Show(ii.ToString());
db.DeleteObject(db.Words.Single(w => w.id == ii));
db.SaveChanges();
}

private void addBtn_Click( object sender, RoutedEventArgs e ) {
System.Guid gg = System.Guid.NewGuid();
db.Words.AddObject(new Words() { id = gg, sentence = translations.Text, translation = sentence.Text });
db.SaveChanges();
dataGrid.Items.Refresh();
}
}

我的数据库表的结构:

Words
---------------
id uniqueidentifier rowguidcol not null primary key,
sentence nvarchar(255) not null,
translation nvarchar(255) not null,

最佳答案

我最好的猜测是 DataContext 被设置为您的项目的副本,而不是指向现有项目。

不是将 DataContext 设置到一个项目,而是将它绑定(bind)到那个项目。这将使 DataContext 指向该项目,而不是复制它。

Binding b = new Binding();
b.Source = db.Words;
dataGrid.SetBinding(DataGrid.ItemsSourceProperty, b);

编辑

刚刚注意到您直接绑定(bind)到上下文。默认情况下,这不会引发 CollectionChanged 事件来告诉您的 DataGrid 项目已更改,因此 DataGrid 不会尝试重新读取它的 ItemsSource。

尝试手动刷新绑定(bind)(dataGrid.GetBindingExpression(DataGrid.ItemsSourceProperty).UpdateTarget()),或通过重新查询数据库来刷新上下文(参见 this answer 示例)

关于c# - 将元素插入源后 WPF DataGrid 不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7455856/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com