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

WPF MVVM Caliburn Micro - Notify属性从另一个ViewModel的ViewModel

仅当this.bookList为空时加载列表。最有可能的是,您将在LoadBookList()中填充bookList。因此,将getter修改为:

if(this.bookList==null)
        this.LoadBookList();
 return this.bookList;

注意:在LoadBookList()中初始化booklist