我定义了以下视图:
<CollectionViewSource x:Key="PatientsView" Source="{Binding Source={x:Static Application.Current}, Path=Patients}"/>
其中患者具有以下属性:
public IEnumerable<Patient> Patients
{
get
{
return from patient in Database.Patients
orderby patient.Lastname
select patient;
}
}
我在代码中的某个位置更改了Patients数据库,并希望显示该数据的控件(使用“ PatientsView”)能够自动通知。什么是正确的方法?
可以使CollectionViewSource无效吗?
最佳答案
我认为这比看起来要复杂一些。通知客户应用程序有关数据库中的更改是一项艰巨的任务。但是,如果仅从应用程序中更改数据库,您的生活就会更轻松-这使您能够在更改数据库时放置“刷新逻辑”。
您的“患者”属性似乎存在于一个类中(可能不止一个?)。)您可能将一些ListBox绑定到CollectionViewSource。因此,不必在CollectionViewSource上调用Refresh,而可以使WPF重新调用getter。为此,具有“患者”属性的类必须实现INotifyPropertyChanged接口。
代码如下所示:
public class TheClass : INotifyPropertyChanged
{
public IEnumerable<Patient> Patients
{
get
{
return from patient in Database.Patients
orderby patient.Lastname
select patient;
}
}
#region INotifyPropertyChanged members
// Generated code here
#endregion
public void PatientsUpdated()
{
if (PropertyChanged != null)
PropertyChanged(this, "Patients");
}
}
现在,在TheClass实例上调用PatientUpdated()以触发绑定的更新。
附言说了这么多,这简直就是一种不好的设计。
关于c# - 使CollectionViewSource无效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/852784/