我陷入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 –