ViewModel中的ObservableCollection,模型中的List

kee*_*r12 3 c# wpf xaml

我很难找到解决必须维护两个列表的问题的方法.

我正在使用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
  }
}
Run Code Online (Sandbox Code Playgroud)

我想避免在上面的案例中有两个不同的集合/列表.我只希望模型处理数据,并ViewModel负责其渲染方式的逻辑.

bli*_*eis 5

你可以做的是在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();
Run Code Online (Sandbox Code Playgroud)

XAML

  <ListBox ItemsSource="{Binding accounts}" />
Run Code Online (Sandbox Code Playgroud)