我对Silverlight开发相对较新,遇到了以下情况:
我有一个绑定到Domain DataSource的DataGrid。有时会通过外部实体对数据进行更新。随后通过Clear()后跟Load()重新加载DataSource。
问题在于,完成此操作后,网格中的数据不会刷新,除非其中一个更改的字段是密钥的一部分。否则,似乎显示该实体的先前数据的缓存版本。
我能够通过向返回的数据集添加时间戳并使其成为密钥的一部分来解决这个问题,但在我看来,这是一个不应该是必需的黑客。刷新数据的正确方法是什么?
答案 0 :(得分:0)
我希望你跟随MVVm结构。
将列表更改为可观察的集合,我希望您从xaml
绑定它以下是可能适合您的代码。
public partial class MainPage : UserControl, INotifyPropertyChanged
{
private ObservableCollection<Customer> _MyList =
new ObservableCollection<Customer>();
public ObservableCollection<Customer> MyList
{
get { return _MyList; }
}
public MainPage()
{
InitializeComponent();
this.DataContext = this;
MyList.Add(new Customer{ _nome = "Josimari", _idade = "29"});
MyList.Add(new Customer{_nome = "Wesley", _idade = "26"});
MyList.Add(new Customer{_nome = "Renato",_idade = "31"});
OnPropertyChanged("MyList"); // This only works if you use bindings.
}
private void Button_Click(object sender, System.Windows.RoutedEventArgs e)
{
MyList.Add(new Customer{_nome = "Maiara",_idade = "18"});
OnPropertyChanged("MyList"); // This only works if you use bindings.
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged( string propertyName )
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
如果它不起作用,请告诉我。