WPF MVVM Caliburn Micro - Notify属性从另一个ViewModel的ViewModel
本文关键字:ViewModel 另一个 属性 Notify MVVM Caliburn Micro WPF | 更新日期: 2023-09-27 18:10:52
我有两个视图
-
Overview-View:包含绑定到IObservableCollection(项目从构造器中的存储库(xml文件)加载)的数据网格
-
Add-View:包含一些文本框和一个按钮,将项目添加到存储库
我现在想要的是通知概述视图的IObservableCollection,一个项目被添加到xml文件
我的第一次尝试是这样的:
public IObservableCollection<Book> BookList
{
get
{
this.LoadBookList();
return this.bookList;
}
set
{
this.bookList = value;
this.NotifyOfPropertyChange(() => this.BookList);
}
}
this.LoadBookList()
从存储库初始化this.bookList
。
这当然有效(条目被添加到xml文件中,因此存储库获得它并设置图书列表),但是存在以下问题:
我在数据网格的每一行都有一个Delete-Button
,它与DeleteItem(Book book)
绑定
public void DeleteItem(Book book)
{
var bookToRemove = this.BookList.Single(b => b.Equals(book));
this.BookList.Remove(bookToRemove);
this.BookRepository.WriteBookList(this.BookList);
}
但是在BookList
-属性中调用this.LoadBookList();
,当调用this.BookRepository.WriteBookList(this.BookList);
一个解决方案是在DeleteItem(...)
-方法中使用支持属性this.bookList
…但这是正确的方法吗?
有没有更好/更漂亮/更干净的方法?
Thanks in advance
仅当this.bookList
为空时加载列表。最有可能的是,您将在LoadBookList()
中填充bookList。因此,将getter修改为:
if(this.bookList==null)
this.LoadBookList();
return this.bookList;
注意:在LoadBookList()中初始化booklist