我定义了以下视图:

<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/

10-13 06:50