ViewModel中的ObservableCollection,Model中的List

本文关键字:中的 List Model ObservableCollection ViewModel | 更新日期: 2023-09-27 18:30:07

我正在努力寻找一个解决方案来解决必须维护两个列表的问题。

我使用MVVM,但不希望我的模型使用ObservableCollection。我觉得这是最好的封装,并允许我使用不同的视图/模式(例如控制台)。而不是像这样设置我的结构:

public class MainWindow {
  // handled in XAML file, no code in the .cs file
}
public abstract class ViewModelBase : INotifyPropertyChanged {
  // handles typical functions of a viewmodel base class
}
public class MainWindowViewModel : ViewModelBaseClass {
  public ObservableCollection<Account> accounts { get; private set; }
}
public class Administrator {
  public List<Account> accounts { get; set; }
  public void AddAccount(string username, string password) {
    // blah blah
  }
}

在上述情况下,我希望避免出现两个不同的集合/列表。我只希望模型处理数据,ViewModel负责其呈现方式的逻辑。

ViewModel中的ObservableCollection,Model中的List

您可以在Viewmodel中使用ICollectionView来显示模型数据。

public class MainWindowViewModel : ViewModelBaseClass {
 public ICollectionView accounts { get; private set; }
 private Administrator _admin;
  //ctor
  public MainWindowViewModel()
  {
     _admin = new Administrator();
     this.accounts  = CollectionViewSource.GetDefaultView(this._admin.accounts);
  }
  //subscribe to your model changes and call Refresh
  this.accounts.Refresh();

xaml

  <ListBox ItemsSource="{Binding accounts}" />