Code in TabItem:
<Border>
<TabControl>
<TabItem Header="First">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<DataGrid Grid.Row="0" Margin="8" Name="dg1" AutoGenerateColumns="False" CanUserAddRows="False"
ItemsSource="{Binding ComboFilterView}" >
<DataGrid.Columns>
...
</DataGrid.Columns>
</DataGrid>
<StackPanel Grid.Row="1" Orientation="Horizontal" Margin="8, 0, 8, 8" HorizontalAlignment="Center" VerticalAlignment="Center">
<ComboBox x:Name="cb" IsEditable="True" Width="300"
ItemsSource="{Binding ComboItems}" DisplayMemberPath="Name"
Text="{Binding SelectedStudent,Mode=TwoWay}">
</ComboBox>
<Button x:Name="FilterFromCombo" Content="Filter" Width="100" Height="28" Margin="8"
Command="{Binding ComboFilterButtonClicked}"/>
</StackPanel>
</Grid>
</TabItem>
<TabItem Header="Second">
</TabItem>
</TabControl>
</Border>
I updated the code below in ViewModel:
public StudentsViewModel()
{
SData = GetAllStudentsFromDatabase();
SData_Pending = GetStudents_Pen();
ComboFilterButtonClicked = new RelayCommand(ComboFilterData);
MyItems = GetStudents();
ComboItems = CollectionViewSource.GetDefaultView(MyItems);
ComboFilterView = (CollectionView)CollectionViewSource.GetDefaultView(SData);
ComboFilterView.Filter = OnComboFilterTriggered;
}
public bool OnComboFilterTriggered(object item)
{
if (String.IsNullOrEmpty(SelectedStudent))
return true;
else
{
var lookup = item as Students;
return lookup != null && lookup.Name == _selectedStudent && lookup.PaidFeesOn =="";
}
}
public void ComboFilterData(object param)
{
CollectionViewSource.GetDefaultView(SData).Filter = OnComboFilterTriggered;
ComboFilterView.Refresh();
}
The result:
Update:
Xaml:
<StackPanel Grid.Row="1" Orientation="Horizontal" Margin="8, 0, 8, 8" HorizontalAlignment="Center" VerticalAlignment="Center">
<ComboBox x:Name="cb" IsEditable="True" Width="300"
ItemsSource="{Binding ComboItems}" DisplayMemberPath="Name"
Text="{Binding SelectedStudent,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" >
</ComboBox>
</StackPanel>
I updated the code below in ViewModel:
private string _selectedStudent;
public string SelectedStudent
{
get
{
return _selectedStudent;
}
set
{
_selectedStudent = value;
OnPropertyChanged("SelectedStudent");
CollectionViewSource.GetDefaultView(SData).Filter = OnComboFilterTriggered;
ComboFilterView.Refresh();
}
}
public StudentsViewModel()
{
SData = GetAllStudentsFromDatabase();
SData_Pending = GetStudents_Pen();
MyItems = GetStudents();
ComboItems = CollectionViewSource.GetDefaultView(MyItems);
ComboFilterView = (CollectionView)CollectionViewSource.GetDefaultView(SData);
ComboFilterView.Filter = OnComboFilterTriggered;
}
public bool OnComboFilterTriggered(object item)
{
if (String.IsNullOrEmpty(SelectedStudent))
return true;
else
{
var lookup = item as Students;
return lookup != null && lookup.Name == _selectedStudent && lookup.PaidFeesOn =="";
}
}
The result:
If the response is helpful, please click "Accept Answer" and upvote it.
Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.