Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用WPF向现有筛选器添加另一个筛选器?_C#_Wpf_Mvvm - Fatal编程技术网

C# 如何使用WPF向现有筛选器添加另一个筛选器?

C# 如何使用WPF向现有筛选器添加另一个筛选器?,c#,wpf,mvvm,C#,Wpf,Mvvm,摘要 已成功开发出以下输出: 解释 代码 XAML <Grid> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition /> &l

摘要

已成功开发出以下输出:

解释

代码

XAML

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>

    <StackPanel Grid.Row="0" Grid.Column="0">
        <TextBlock Text="Organisation" />
        <DataGrid ItemsSource="{Binding OrganisationView}" SelectedItem="{Binding Search}">

        </DataGrid>
    </StackPanel>

    <StackPanel Grid.Row="0" Grid.Column="1">
        <TextBlock Text="Organisation Department" />
        <DataGrid ItemsSource="{Binding OrganisationDepartmentView}">

        </DataGrid>
    </StackPanel>

    <StackPanel Grid.Row="1" Grid.Column="0">
        <TextBlock Text="Department" />
        <DataGrid ItemsSource="{Binding DepartmentView}">

        </DataGrid>
    </StackPanel>
</Grid>

这不会返回任何值。

将筛选器添加到部门视图:

private bool Filter(DepartmentModel department)
{
    return OrganisationDepartmentModels.Any(odm =>
       Search == null ||
       (Search.Id = odm.OrganisationId && department.Id == odm.DepartmentId));
}
如果集合很大且存在滞后风险,则使用键元组(OrganizationId,DepartmentId)将OrganizationDepartmentModels转换为字典。 并使用键查找,而不是使用Any()-这对于大型集合来说要快得多。

现在就开始吧

private bool Filter2(DepartmentModel department)
{
    List<OrganisationDepartmentModel> list = OrganisationDepartmentModels.Where(item => (Search.Id == item.OrganisationId)).ToList();
    List<DepartmentModel> list2 = DepartmentModels.Where(item => item.Id == department.Id).ToList();

    var combined = list2.Where(item => list.Any(x => x.DepartmentId == item.Id));

    return combined.All(item => item.Id != department.Id); // Needed to do `All` instead of `Any`
}
private bool Filter2(部门模型部门)
{
List List=OrganizationDepartmentModels.Where(item=>(Search.Id==item.organizationId)).ToList();
List list2=DepartmentModels.Where(item=>item.Id==department.Id).ToList();
var combined=list2.Where(item=>list.Any(x=>x.DepartmentId==item.Id));
返回组合的.All(item=>item.Id!=department.Id);//需要执行'All'而不是'Any'`
}

请澄清您的要求。。。
public class OrganisationDepartmentModel
{
    public int Id { get; set; }
    public int OrganisationId { get; set; }
    public int DepartmentId { get; set; }

    public ObservableCollection<OrganisationDepartmentModel> GetOrganisationDepartmentModels()
    {
        ObservableCollection<OrganisationDepartmentModel> organisationDepartmentModels = new ObservableCollection<OrganisationDepartmentModel>();
        organisationDepartmentModels.Add(new OrganisationDepartmentModel { Id = 1, OrganisationId = 1, DepartmentId = 1 });
        organisationDepartmentModels.Add(new OrganisationDepartmentModel { Id = 2, OrganisationId = 1, DepartmentId = 2 });
        organisationDepartmentModels.Add(new OrganisationDepartmentModel { Id = 3, OrganisationId = 2, DepartmentId = 1 });
        organisationDepartmentModels.Add(new OrganisationDepartmentModel { Id = 4, OrganisationId = 3, DepartmentId = 3 });
        organisationDepartmentModels.Add(new OrganisationDepartmentModel { Id = 5, OrganisationId = 4, DepartmentId = 1 });
        organisationDepartmentModels.Add(new OrganisationDepartmentModel { Id = 6, OrganisationId = 4, DepartmentId = 3 });

        return organisationDepartmentModels;
    }
}
public class ViewModel : BaseViewModel
{
    // Organisations
    private ObservableCollection<OrganisationModel> organisationModels;
    public ObservableCollection<OrganisationModel> OrganisationModels
    {
        get { return organisationModels; }
        set
        {
            organisationModels = value;
            OnPropertyChanged();
        }
    }
    public OrganisationModel CopyOfOrganisationModel { get; set; }

    private ICollectionView organisationView;
    public ICollectionView OrganisationView
    {
        get { return organisationView; }
        set
        {
            organisationView = value;
            OnPropertyChanged();
        }
    }

    // Departments
    private ObservableCollection<DepartmentModel> departmentModels;
    public ObservableCollection<DepartmentModel> DepartmentModels
    {
        get { return departmentModels; }
        set
        {
            departmentModels = value;
            OnPropertyChanged();
        }
    }
    public DepartmentModel CopyOfDepartmentModel { get; set; }

    private ICollectionView departmentView;
    public ICollectionView DepartmentView
    {
        get { return departmentView; }
        set
        {
            departmentView = value;
            OnPropertyChanged();
        }
    }

    // OrganisationDepartments
    private ObservableCollection<OrganisationDepartmentModel> organisationDepartmentModels;
    public ObservableCollection<OrganisationDepartmentModel> OrganisationDepartmentModels
    {
        get { return organisationDepartmentModels; }
        set
        {
            organisationDepartmentModels = value;
            OnPropertyChanged();
        }
    }

    public OrganisationDepartmentModel CopyOfOrganisationDepartmentModel { get; set; }
    private ICollectionView organisationDepartmentView;

    public ICollectionView OrganisationDepartmentView
    {
        get { return organisationDepartmentView; }
        set
        {
            organisationDepartmentView = value;
            OnPropertyChanged();
        }
    }

    // Filtering here
    private bool Filter(OrganisationDepartmentModel organisation)
    {
        return organisation.OrganisationId == Search.Id;
    }

    private OrganisationModel search;
    public OrganisationModel Search
    {
        get { return search; }
        set
        {
            search = value;
            OnPropertyChanged();
            OrganisationDepartmentView.Refresh();
        }
    }


    // Constructor
    public ViewModel()
    {
        CopyOfOrganisationModel = new OrganisationModel();
        CopyOfDepartmentModel = new DepartmentModel();
        CopyOfOrganisationDepartmentModel = new OrganisationDepartmentModel();

        RefreshData();
    }

    // Mehtods to refresh data
    public void RefreshData()
    {
        OrganisationModels = CopyOfOrganisationModel.GetOrganisationModels();
        DepartmentModels = CopyOfDepartmentModel.GetDepartmentModels();
        OrganisationDepartmentModels = CopyOfOrganisationDepartmentModel.GetOrganisationDepartmentModels();

        OrganisationView = CollectionViewSource.GetDefaultView(OrganisationModels);
        DepartmentView = CollectionViewSource.GetDefaultView(DepartmentModels);
        OrganisationDepartmentView = CollectionViewSource.GetDefaultView(OrganisationDepartmentModels);

        Search = new OrganisationModel();
        OrganisationDepartmentView.Filter = new Predicate<object>(o => Filter(o as OrganisationDepartmentModel));
    }

}
private bool Filter2(DepartmentModel department)
{
    List<OrganisationDepartmentModel> list = OrganisationDepartmentModels.Where(item => (Search.Id == item.OrganisationId)).ToList();
    List<DepartmentModel> list2 = DepartmentModels.Where(item => item.Id == department.Id).ToList();

    var result = list2.Where(item => list.Any(x => x.DepartmentId == item.Id));

    return result.Any(item => item.Id != department.Id);
}
private bool Filter(DepartmentModel department)
{
    return OrganisationDepartmentModels.Any(odm =>
       Search == null ||
       (Search.Id = odm.OrganisationId && department.Id == odm.DepartmentId));
}
private bool Filter2(DepartmentModel department)
{
    List<OrganisationDepartmentModel> list = OrganisationDepartmentModels.Where(item => (Search.Id == item.OrganisationId)).ToList();
    List<DepartmentModel> list2 = DepartmentModels.Where(item => item.Id == department.Id).ToList();

    var combined = list2.Where(item => list.Any(x => x.DepartmentId == item.Id));

    return combined.All(item => item.Id != department.Id); // Needed to do `All` instead of `Any`
}