У меня есть сетка данных, которая должна представлять два типа набора данных в два разных времени события.
При загрузке формы - сетка данных показывает модель класса с полем со списком без фильтрации
при нажатии кнопки - таблица данных показывает класс модели с полем со списком (поэтому здесь я планирую отфильтровать класс модели с полем со списком и показать его по событию)
XAML:
<DataGrid Height="150" x:Name="datagrid1" AutoGenerateColumns="True" CanUserAddRows="False" Width="467" Margin="299,-135,40,9" HorizontalAlignment="Left">
<DataGrid.Style>
<Style TargetType="{x:Type DataGrid}">
<Setter Property="ItemsSource" Value="{Binding Populatedatagridwithobservablecollection.modelclasswithcombobox}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Isauditorsearch}" Value="True">
<Setter Property="ItemsSource" Value="{Binding Populatedatagridwithobservablecollection._CarListView}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.Style>
</DataGrid>
После прочтения в Интернете я узнал о фильтрации ICollectionView для целей фильтрации.
public interface INofificationActionfordatagrid
{
ObservableCollection<datagridmodel> modelclasswithcombobox { get; set;}
ICollectionView _CarListView { get; }
void getdatausinglinq();
}
public class PopulateDatagrid : INofificationActionfordatagrid
{
public ObservableCollection<datagridmodel> modelclasswithcombobox { get; set; }
//get { return CollectionViewSource.GetDefaultView(modelclasswithcombobox); } set { OnPropertyChanged("_CarListView");
public ICollectionView _CarListView { get; set; }
public void Filterbind(string an)
{
getdatausinglinq();
this._CarListView = CollectionViewSource.GetDefaultView(modelclasswithcombobox);
this._CarListView.Filter = item =>
{
datagridmodel vitem = item as datagridmodel;
return vitem != null && vitem.UserName.Contains(an);
};
this._CarListView.Refresh();
}
public void getdatausinglinq()
{
//ItemsView.Filter = new Predicate<object>(o => Filter(o as datagridmodel));
using (Operations_Productivity_ToolEntities context = new Operations_Productivity_ToolEntities())
{
var a1 = from t1 in context.Test_ImportedAuditdata
where t1.status == "Pending"
select t1;
if (modelclasswithcombobox == null)
modelclasswithcombobox = new ObservableCollection<datagridmodel>();
foreach (var a in a1)
{
modelclasswithcombobox.Add(new datagridmodel
{
AuditId = a.AuditId.ToString(),
Claimnumber = a.ClaimNumber.ToString(),
UserName = a.username,
CreateDate = a.Created_Date.ToString(),
ID = a.id.ToString(),
Status = a.status
});
}
context.SaveChanges();
}
}
}
public class Reassignseperately
{
PopulateDatagrid getdata = new PopulateDatagrid();
public void Reassignsep(string getitem1, ViewModel an1)
{
an1.Isauditorsearch = true;
getdata.Filterbind(getitem1);
}
}
public class ViewModel : INotifyPropertyChanged
{
INofificationActionfordatagrid
_populatedatagridwithobservablecollection = new PopulateDatagrid();
public INofificationActionfordatagrid
Populatedatagridwithobservablecollection
{
get
{
return _populatedatagridwithobservablecollection;
}
set
{
if (value != _populatedatagridwithobservablecollection)
{
_populatedatagridwithobservablecollection = value;
OnPropertyChanged("Populatedatagridwithobservablecollection");
}
}
}
private bool _Isauditorsearch;
public bool Isauditorsearch
{
get { return this._Isauditorsearch; }
set
{
if (this._Isauditorsearch != value)
{
this._Isauditorsearch = value;
OnPropertyChanged("Isauditorsearch");
}
}
}
private string _CurrentItem3;
public string Currentcomboboxitem3
{
get { return this._CurrentItem3; }
set
{
if (this._CurrentItem3 != value)
{
this._CurrentItem3 = value;
OnPropertyChanged("Currentcomboboxitem3");
}
}
}
public ViewModel()
{
Isauditorsearch = false;
ReassignusersSeperately = new RelayCommand(o =>
sep.Reassignsep(Currentcomboboxitem3, this));
}
}
Но проблема в том, что отфильтрованное значение не связано с xaml.С помощью точки останова на _carlistview.currentItem я вижу результат, как и ожидалось.Но при отображении сетки данных ничего не отображается даже без заголовков.
Также я узнал, что фильтрация не работает для привязки триггера данных.
Может кто-нибудь помочь мне в этом вопросе.