c# - ViewModel 中的 ObservableCollection,模型中的列表

标签 c# wpf xaml

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

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

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 中使用 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}" />

关于c# - ViewModel 中的 ObservableCollection,模型中的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26876990/

相关文章:

c# - 如何从后面的代码更改源图像属性

c# - 不能使用与其父 Freezable 属于不同线程的 DependencyObject

c# - 在统一网格内拖放项目

wpf - 可调整大小的 WPF 网格根据实际大小在行和列之间插入空行

xaml - ListView 和 GridView WinRT xaml 中的粘性标题

c# - 刷新命令在 Xamarin.Forms 选项卡式页面内的 ListView 中不起作用

c# - 指定的转换无效

c# - 如何使用 sql 参数进行选择查询?

wpf - 如何在 Visual Studio 中快速切换 XAML 和设计模式

silverlight - 数据输入表单布局