在我的数据库助手类中,我设置连接,创建Table和ObservableCollection对象并处理所有数据库操作:
public class ProfilesSourceSQLite : IProfilesSource
{
private Table<ProfileManager.Profile> Profiles;
private ObservableCollection<ProfileManager.Profile> profilesCollection;
public ProfilesSourceSQLite()
{
...
Profiles = dbContext.GetTable<ProfileManager.Profile>();
profilesCollection = new ObservableCollection<ProfileManager.Profile>(Profiles);
}
public ObservableCollection<ProfileManager.Profile> GetProfilesCollection()
{
return profilesCollection;
}
public bool AddProfile(ProfileManager.Profile profile)
{
try
{
Profiles.InsertOnSubmit(profile);
dbContext.SubmitChanges();
}
...
}
}
我的问题是永远不会触发CollectionChanged
profilesCollection
事件。
public class ProfileManager
{
private static ProfileManager instance;
public static ProfileManager Instance
{
get
{
if (instance == null)
instance = new ProfileManager();
return instance;
}
}
private ProfileManager()
{
...
profiles = new ProfilesSourceSQLite();
profiles.GetProfilesCollection().CollectionChanged += ProfileManager_CollectionChanged;
}
private void ProfileManager_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
// MessageBox never appears
MessageBox.Show("CHANGED!");
}
public bool AddProfile(Profile profile)
{
return profiles.AddProfile(profile);
}
}
// Somewhere in the UI class
private void btnClicked()
{
ProfileManager.Instance.AddProfile(newProfile);
}
我想让profilesCollection
成为ItemsSource
的{{1}},所以我不必关心处理项目列表更改,但它也不能用作这个更简单的示例。我究竟做错了什么?或者有更好的方法吗?
答案 0 :(得分:1)
通过向数据库添加ObservableCollection<ProfileManager.Profile>
将自动更新,您所犯的错误。它不会。
当您致电new ObservableCollection<ProfileManager.Profile>(Profiles);
时,它会在数据库中创建配置文件的快照。它不会创建任何指向数据库的链接,因此未来的数据库更新不会复制到集合中。
因此代码Profiles.InsertOnSubmit(profile); dbContext.SubmitChanges();
不会更新集合。因此,它不会引发这一事件。
答案 1 :(得分:0)
您正在更改集合中的项目,而不是集合本身
您需要ProfileManager.Profile
实施INotifyPropertyChanged
来满足您的要求。