我很难找到解决必须维护两个列表的问题的方法。
我正在使用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
负责处理数据的逻辑。
答案 0 :(得分: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();
XAML
<ListBox ItemsSource="{Binding accounts}" />