我陷入WPF中的MVVM中,并且我已经设置了ObservableCollection
和ICollectionView
。 ICollectionView
被设置为DataGrid
的ItemsSource,并且该模型是Job
的类型。MVVM中ICollectionView和正确绑定和ObservableCollection的过滤方法
我已经为这两个集合然而,当我设置的ICollectionView
而不是Job
一个Filter
由他们只是重复了一遍又一遍的SearchString
被过滤的设置getter和setter方法,导致我相信,他们的方式,我有收藏安装是完全错误的。
下面是两个集合是如何的get/set:
public ObservableCollection<Job> AllJobs
{
get
{
foreach (var job in _allJobsList)
_allJobs.Add(job);
return _allJobs;
}
set
{
if (_allJobs == value) return;
OnPropertyChanged("AllJobs");
}
}
public ICollectionView AllJobsView
{
get
{
_allJobsView = CollectionViewSource.GetDefaultView(AllJobs);
return _allJobsView;
}
set
{
if (_allJobsView == value)
{
return;
}
_allJobsView = value;
OnPropertyChanged("AllJobsView");
}
}
现在我有一个stringcalled SearchString
绑定到一个TextBox.Text
。当文本改变我做到以下几点:
public string SearchString
{
get => _searchString;
set
{
if (_searchString == value) return;
_searchString = value;
FilterJobs();
OnPropertyChanged("SearchString");
}
}
private void FilterJobs()
{
AllJobsView.Filter = x =>
{
var viewJob = x as Job;
return viewJob != null && viewJob.Number.Contains(_searchString);
};
}
现在,当第一次加载页面,有装入DataGrid
正确Jobs
。但是,如果Job.Number
包含SearchString
,只要用户键入Jobs
就会被复制。我如何设置集合以便我可以适当地设置过滤器?
https://stackoverflow.com/a/39438710/1069200 –