我创建了这个窗口:
当我添加新用户,删除或更新时,它成功应用于服务器。但它不会更新下面的数据网格。这是我的一个职能:
private void Delete_Button_Click(object sender, RoutedEventArgs e)
{
using(var ctx = new PersonelContext())
{
PersonelEntity personel = (
from s in ctx.Personels
where s.Name == NameBox.Text
select s).FirstOrDefault();
ctx.Personels.Remove(personel);
ctx.SaveChanges();
}
this.personelEntityDataGrid.Items.Refresh();
}
如您所见,我正在刷新数据网格,但它仍然没有显示新结果。我该如何解决这个问题?
答案 0 :(得分:3)
MVVM示例
假设您有一个带有datagrid的窗口:
<Window x:Class="WpfApplication7.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<DataGrid ItemsSource="{Binding Personels}">
<DataGrid.Columns>
<DataGridTextColumn Header="Nom" Binding="{Binding Nom}" Width="200"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</Window>
我们必须定义他的datacontext(或绑定不知道在哪里找到):
namespace WpfApplication7
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new MainViewModel(this);
}
}
}
然后我们可以定义ViewModel(窗口的datacontext):
class MainViewModel : ViewModelBase
{
/// <summary>
/// Référence de la fenêtre principale
/// </summary>
private MainWindow mainWindow;
/// <summary>
/// Liste des personels
/// </summary>
private ObservableCollection<Personel> personels = new ObservableCollection<Personel>();
public ObservableCollection<Personel> Personels
{
get
{
return personels;
}
}
/// <summary>
/// Constructeur de la classe
/// </summary>
/// <param name="mainWindow">Référence de la fenêtre principale</param>
public MainViewModel(MainWindow mainWindow)
{
this.mainWindow = mainWindow;
AddPersonel("Toto");
AddPersonel("Jack");
AddPersonel("Momo");
AddPersonel("Momo");
AddPersonel("Momo");
AddPersonel("Momo");
}
private void AddPersonel(string namePersonel)
{
personels.Add(new Personel() { Name = namePersonel });
OnPropertyChanged("Personels");
}
}
class Personel
{
private string name = "NoName";
public string Name
{
get { return name; }
set { name = value; }
}
}
MainViewModel必须实现INotifyPropertyChanged以通知控件属性值已更改。 :
public abstract class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
答案 1 :(得分:1)
您需要首先实现INotifyPropertyChanged接口。
此外,当您从列表中删除该项目时,请创建一个没有该项目的新列表,并将其设置为DataGrid的项目源
IEnumerable<Personels> res = m_Parameters.Where( p.Name != NameBox.Text));
personelEntityDataGrid.ItemsSource = res;