我有DataGrid
绑定ItemsSource
:
<DataGrid
x:Name="grid"
FlowDirection="RightToLeft"
AutoGenerateColumns="False"
ItemsSource="{Binding ListGuards}"
IsReadOnly="True">
列定义(一个例子):
<DataGridTextColumn Header="ID" Binding="{Binding Id}" />
代码隐藏:
public ObservableCollection<TableGuard> ListGuards { get; set; }
public C'tor(...) {
ListGuards = new ObservableCollection<TableGuard>(s); //s = List<TableGuard>
this.DataContext = this;
}
提交数据:
private void submit(object sender, RoutedEventArgs e) {
if (list == null)
list = new List<TableGuard>();
TableGuard guard = new TableGuard();
guard.FName = fName.Text;
guard.LName = lName.Text;
guard.Id = int.Parse(id.Text);
guard.WorkPlace = workPlace.Text;
guard.LastTraining = lastTraining.Text;
guard.NextTraining = nextTraining.Text;
guard.Birthday = birthDay.Text;
guard.TrainingType = trainingType.Text;
bool exists = false;
foreach (var g in list)
if (guard.Id == g.Id) {
exists = true;
break;
}
if (exists)
MessageBox.Show("ID EXISTS!");
else if (id.Text.Length < 9)
MessageBox.Show("ID NEEDS TO BE 9 DIGITS!");
else {
if (isEdit) {
jsonObj[selectedRow]["Id"] = guard.Id;
jsonObj[selectedRow]["FName"] = guard.FName;
jsonObj[selectedRow]["LName"] = guard.LName;
jsonObj[selectedRow]["Birthday"] = guard.Birthday;
jsonObj[selectedRow]["LastTraining"] = guard.LastTraining;
jsonObj[selectedRow]["NextTraining"] = guard.NextTraining;
jsonObj[selectedRow]["WorkPlace"] = guard.WorkPlace;
jsonObj[selectedRow]["TrainingType"] = guard.TrainingType;
File.WriteAllText(path, JsonConvert.SerializeObject(jsonObj));
Close();
} else {
list.Add(guard);
File.WriteAllText(path, JsonConvert.SerializeObject(list));
Close();
}
}
}
我想在编辑一些数据后刷新DataGrid
。我该怎么做?
答案 0 :(得分:0)
试试这个:
grid.Items.Refresh();
我想知道这是否适合你的情况。
编辑:拼写
答案 1 :(得分:-2)
当您使用ObservableCollection
时,您的网格会在列表中添加或删除时更新。
但是,如果您要实例化新的ObservableCollection
,则您的网格不会更新,因为您的媒体资源未实施INotifyPropertyChanged
。
在您的班级中实施INotifyPropertyChanged
界面并调用PropertyChanged
事件来更新您的网格:
private ObservableCollection<TableGuard> _ListGuards;
public ObservableCollection<TableGuard> ListGuards
{
get { return _ListGuards; }
set
{
_ListGuards = value;
OnPropertyChanged("ListGuards");
}
}
编辑:
在提交方法结束时,您只需重置 ListGuards 列表中的所有项目。在项目上实施.Clear()
后,可以调用ObservableCollection
方法并将项目添加到集合中,或者实例化新的INotifyPropertyChanged
。
答案 2 :(得分:-2)
您的TableGuard类必须实现INotifyPropertyChanged并正确引发它。在datagrid的您的columnsdefinition中,您必须将模式设置为TwoWay。如果您在集合中添加和删除项目,请查看其他答案。
仅适用于downvote:
如果您调试代码并在ctor中的行中
this.DataContext = this;
您的Property ListGuards属性为空,您从不使用ListGuards.Add / Remove,您不应该在网格中看到任何内容。
答案 3 :(得分:-2)
的Android
在您提交的方法中,您可以将ListGuard设置为列表,或者只是添加ListGuard集合中的所有对象