首页 > 解决方案 > 我将如何检查 e.item 是否与 collectionviewsource 中的对象相同?

问题描述

我想检查 e.Item 是否与 collectionviewsource 中的任何对象相同,如果是,则它们被接受。

namespace Planteskole.WPF.Views
{
    /// <summary>
    /// Interaction logic for HomeView.xaml
    /// </summary>
    public partial class HomeView : UserControl
    {
        private readonly PlantContext _context = new PlantContext();

        private CollectionViewSource PlantViewSource;
        private CollectionViewSource AreaViewSource;
        private CollectionViewSource LocationViewSource;

        public HomeView()
        {
            InitializeComponent();

            PlantViewSource = (CollectionViewSource)FindResource(nameof(PlantViewSource));
            AreaViewSource = (CollectionViewSource)FindResource(nameof(AreaViewSource));
            LocationViewSource = (CollectionViewSource)FindResource(nameof(LocationViewSource));
        }

        private void Grid_Loaded(object sender, RoutedEventArgs e)
        {
            //_context.Database.EnsureDeleted();

            _context.Database.EnsureCreated();

            _context.Plants.Load();
            _context.Areas.Load();
            _context.Locations.Load();

            PlantViewSource.Source = _context.Plants.Local.ToObservableCollection();
            AreaViewSource.Source = _context.Areas.Local.ToObservableCollection();
            LocationViewSource.Source = _context.Locations.Local.ToObservableCollection();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            _context.SaveChanges();

            PlantDataGrid.Items.Refresh();
        }

        private void CollectionViewSource_Filter(object sender, FilterEventArgs e)
        {
            
            for (int i = 0; i < 100; i++)
            {
                if ((e.Item as Area).Id == 20)
                {
                    e.Accepted = true;
                }
                else
                {
                    e.Accepted = false;
                }
            }
        }
    }
}
<UserControl.Resources>
        <CollectionViewSource x:Key="PlantViewSource"/>
        <CollectionViewSource x:Key="AreaViewSource"/>
        <CollectionViewSource x:Key="LocationViewSource" Filter = "CollectionViewSource_Filter"/>
    </UserControl.Resources>
    <Grid Loaded="Grid_Loaded" Margin="10">
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="auto"/>
        </Grid.RowDefinitions>
        <ListBox Grid.Row="0" x:Name="PlantDataGrid" ItemsSource ="{Binding Source={StaticResource AreaViewSource}}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Expander Header="{Binding Name}">
                        <ListBox ItemsSource ="{Binding Source={StaticResource LocationViewSource}}">
                            <ListBox.ItemTemplate>
                                <DataTemplate>
                                    <Expander Header="{Binding Name}">
                                        <Grid>
                                            <DataGrid AutoGenerateColumns="False" EnableRowVirtualization="True" 
                                                    ItemsSource="{Binding Source={StaticResource PlantViewSource}}" RowDetailsVisibilityMode="VisibleWhenSelected" 
                                                    RenderTransformOrigin="0.488,0.251">
                                                <DataGrid.Columns>
                                                    <DataGridTextColumn Binding="{Binding Id}" Header="Id" Width="auto" IsReadOnly="True"/>
                                                    <DataGridTextColumn Binding="{Binding Name}" Header="Name" Width="auto"/>
                                                    <DataGridTextColumn Binding="{Binding Amount}" Header="Amount" Width="auto"/>
                                                    <DataGridTextColumn Binding="{Binding Sellable}" Header="Sellable" Width="*"/>
                                                </DataGrid.Columns>
                                            </DataGrid>
                                        </Grid>
                                    </Expander>
                                </DataTemplate>
                            </ListBox.ItemTemplate>
                        </ListBox>
                    </Expander>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
        
        <Button Grid.Row="1" Content="Save" HorizontalAlignment="Center" Margin="0 10" Click="Button_Click" Height="20" Width="124"/>
    </Grid>
</UserControl>

最终结果应该是,如果区域表中的列的 Id 与数据库中位置表中的值“areaid”相同,则该位置将显示在该区域下。

我是新来的,所以我不知道是否应该将所有代码都放在帖子中。随时纠正我,并提前感谢!

标签: c#wpfsqlitexamlmvvm

解决方案


推荐阅读