Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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 collectionview多重过滤器_C#_Wpf_Listview_Collectionview_Icollectionview - Fatal编程技术网

C# wpf collectionview多重过滤器

C# wpf collectionview多重过滤器,c#,wpf,listview,collectionview,icollectionview,C#,Wpf,Listview,Collectionview,Icollectionview,我需要一些建议。我有两个ListView第一个ListView是“ListViewAlbums”,第二个是“ListViewTracks”。   ListViewTracks中的项目被组织为组。 ListViewAlbums设置为SelectionMode=“Extended”和行为:MultiSelectorBehaviours.SynchronizedSelectedEdItems。 当我从ListViewAlbums中选择多个项目时,我希望显示基于ALBUMID的ListViewTrac

我需要一些建议。我有两个ListView第一个ListView是“ListViewAlbums”,第二个是“ListViewTracks”。   ListViewTracks中的项目被组织为组。 ListViewAlbums设置为SelectionMode=“Extended”和行为:MultiSelectorBehaviours.SynchronizedSelectedEdItems。

当我从ListViewAlbums中选择多个项目时,我希望显示基于ALBUMID的ListViewTracks中的所有项目

我当前的代码:

ListViewTracks组描述:

 PropertyGroupDescription groupDescription = new PropertyGroupDescription("AlbumID");
 viewTrack.GroupDescriptions.Add(groupDescription);

 viewTrack.SortDescriptions.Add(new System.ComponentModel.SortDescription("AlbumTitle", System.ComponentModel.ListSortDirection.Ascending));
 viewTrack.SortDescriptions.Add(new System.ComponentModel.SortDescription("TitleTrack", System.ComponentModel.ListSortDirection.Ascending));
员工数据:

     private ObservableCollection<EmployeesAlbums> _listAlbums = new ObservableCollection<EmployeesAlbums>();
     public ObservableCollection<EmployeesTracks> _listTrack = new ObservableCollection<EmployeesTracks>();


    public ObservableCollection<EmployeesTracks> PlayListTracks
    {
        get { return _listTrack; }
        set { _listTrack = value; RaisePropertyChanged("PlayListTracks"); }
    }
    public ObservableCollection<EmployeesAlbums> PlayListAlbums
    {
        get { return _listAlbums; }
        set { _listAlbums = value; RaisePropertyChanged("PlayListAlbums"); }
    }
    EmployeesAlbums model = new EmployeesAlbums
    {
       IdAlbums = int.Parse(rdr["Id"].ToString()),
       TitleAlbum = rdr["TitleAlbums"].ToString(),
       ArtistAlbum = rdr["ArtistAlbums"].ToString()
    };
    modelTracks = new EmployeesTracks
    {
       IdTrack = int.Parse(rdr["Id"].ToString()),
       TitleTrack = rdr["TitleTrack"].ToString(),
       PathTrack = rdr["Path"].ToString(),
       AlbumTitle = rdr["AlbumTitle"].ToString(),
       ArtistTrack = rdr["ArtistTrack"].ToString(),
       AlbumID = int.Parse(rdr["AlbumId"].ToString()).ToString()

    };
private ObservableCollection\u listAlbums=new ObservableCollection();
公共ObservableCollection_listTrack=新ObservableCollection();
公共可观测收集播放曲目
{
获取{return\u listTrack;}
设置{u listTrack=value;RaisePropertyChanged(“playlitTracks”);}
}
公共可观测收集播放列表
{
获取{return\u listAlbums;}
设置{u listAlbums=value;RaisePropertyChanged(“playlayAlbums”);}
}
员工模型=新员工模型
{
IdAlbums=int.Parse(rdr[“Id”].ToString()),
TitleAlbum=rdr[“TitleAlbums”]。ToString(),
ArtistAlbum=rdr[“ArtistAlbums”].ToString()
};
modelTracks=新员工名单
{
IdTrack=int.Parse(rdr[“Id”].ToString()),
TitleTrack=rdr[“TitleTrack”].ToString(),
PathTrack=rdr[“路径”]。ToString(),
AlbumTitle=rdr[“AlbumTitle”]。ToString(),
ArtistTrack=rdr[“ArtistTrack”]。ToString(),
AlbumID=int.Parse(rdr[“AlbumID”].ToString()).ToString()
};
选择ListViewAlbums的编辑项:

    SelectionChangedItemsAlbumCommand = new GalaSoft.MvvmLight.CommandWpf.RelayCommand(SelectionChangedItemsAlbum);       

    private EmployeesAlbums _selectedPlayListFileAlbum;       
    public EmployeesAlbums SelectedPlayListFileAlbum
    {
        get { return _selectedPlayListFileAlbum; }
        set
        {

            if (_selectedPlayListFileAlbum != value)
            {
                _selectedPlayListFileAlbum = value;
                RaisePropertyChanged("SelectedPlayListFileAlbum");
            }     
        }
    }

    private IEnumerable<EmployeesAlbums> _selectedPlayListFilesAlbums;
    public IEnumerable<EmployeesAlbums> SelectedPlayListFilesAlbums
    {
        get { return this.selectedPlayListFilesAlbums; }
        set { Set(ref selectedPlayListFilesAlbums, value); }
    }
SelectionChangedItemsAlbumCommand=new-GalaSoft.MvvmLight.CommandWpf.RelayCommand(SelectionChangedItemsAlbum);
私人员工的唱片(u selected playlay filealbum);;
公共员工员工选择播放文件相册
{
获取{return _selectedPlayFileAlbum;}
设置
{
如果(_selectedplaylipfilealbum!=值)
{
_SelectedPlayFileAlbum=值;
RaisePropertyChanged(“SelectedPlayFileAlbum”);
}     
}
}
私人IEnumerable\u选择播放文件相册;
公共IEnumerable Selected播放文件相册
{
获取{返回this.selectedPlayFilesAlbums;}
set{set(ref selectedplaylipfiles相册,值);}
}
筛选:

    public string AlbumID { get; set; }
    void SelectionChangedItemsAlbum()
    {

            foreach (var items in SelectedPlayListFilesAlbums)
            {

                ListCollectionView empView = CollectionViewSource.GetDefaultView(PlayListTracks) as ListCollectionView;
                // Enable Live Filtering of the ListViewCollection
                empView.IsLiveFiltering = true;
                // Enable the filtering on AlbumID
                empView.LiveFilteringProperties.Add("AlbumID");
                AlbumID = items.IdAlbums.ToString();
                // Filter based upon AlbumID
                empView.Filter = new Predicate<object>(IsMatchFoundAlbums);
                // Refresh Collection
                empView.Refresh();
            }
    }
    bool IsMatchFoundAlbums(object d)
    {
        bool res = false;
        EmployeesTracks emp = d as EmployeesTracks;
            if (emp.AlbumID == AlbumID)
            {
                res = true;
            }            
        return res;
    }
公共字符串AlbumID{get;set;}
void SelectionChangedItemsAlbum()
{
foreach(选定播放文件相册中的var项)
{
ListCollectionView empView=CollectionViewSource.GetDefaultView(播放曲目)作为ListCollectionView;
//启用ListViewCollection的实时筛选
empView.IsLiveFiltering=true;
//启用对AlbumID的筛选
empView.LiveFilteringProperties.Add(“AlbumID”);
AlbumID=items.IdAlbums.ToString();
//基于AlbumID的过滤器
empView.Filter=新谓词(IsMatchFoundAlbums);
//刷新集合
empView.Refresh();
}
}
布尔IsMatchFoundAlbums(对象d)
{
bool res=假;
EmployeesTracks emp=d作为EmployeesTracks;
if(emp.AlbumID==AlbumID)
{
res=真;
}            
返回res;
}
XAML代码:

<ListView x:Name="ListViewTracks" 

       VirtualizingPanel.ScrollUnit="Pixel"
       VirtualizingStackPanel.CacheLength="20,20"
       VirtualizingStackPanel.CacheLengthUnit="Item"

       ItemsSource="{Binding PlayListTracks}"  
       Style="{StaticResource CommonListViewStyleTracks}"      
       ItemContainerStyle="{DynamicResource styleListViewItem}"      
   >

<ListView.GroupStyle>
            <GroupStyle>
                <GroupStyle.Panel>
                    <ItemsPanelTemplate>

                        <VirtualizingStackPanel/>

                    </ItemsPanelTemplate>
                </GroupStyle.Panel>
                <GroupStyle.ContainerStyle>
                    <Style TargetType="{x:Type GroupItem}" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
                        <Setter Property="Control.Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="{x:Type GroupItem}">
                                    <StackPanel>
                                        <ContentPresenter Content="{TemplateBinding ContentControl.Content}" 
                                        ContentTemplate="{TemplateBinding ContentControl.ContentTemplate}"
                                        ContentStringFormat="{TemplateBinding ContentControl.ContentStringFormat}" />
                                        <ItemsPresenter Margin="0,0,0,20" />
                                    </StackPanel>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </GroupStyle.ContainerStyle>
                <GroupStyle.HeaderTemplate>
                    <DataTemplate >

                        <Grid d:DesignWidth="460" Height="51">
                            <StackPanel>
                                <TextBlock DataContext="{Binding Items}" Text="{Binding AlbumTitle}" FontSize="18" TextTrimming="CharacterEllipsis" Foreground="{DynamicResource ItemsListViewForeground}"/>
                                <TextBlock DataContext="{Binding Items}" Text="{Binding ArtistTrack}" TextTrimming="CharacterEllipsis" Foreground="{DynamicResource AccentColorApps}"/>
                            </StackPanel>
                        </Grid>
                    </DataTemplate>
                </GroupStyle.HeaderTemplate>
            </GroupStyle>
        </ListView.GroupStyle>
        </ListView>

        <ListView 

              x:Name="ListViewAlbums" 
              VirtualizingPanel.IsVirtualizing="True" 
              VirtualizingPanel.VirtualizationMode="Recycling"
              IsSynchronizedWithCurrentItem="True"   
              ItemsSource="{Binding PlayListAlbums}"
              SelectionMode="Extended" 
              SelectedItem="{Binding SelectedPlayListFileAlbum,UpdateSourceTrigger=PropertyChanged}" SelectionMode="Extended" 
              behaviours:MultiSelectorBehaviours.SynchronizedSelectedItems="{Binding SelectedPlayListFilesAlbums, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" 
              Background="{x:Null}" Grid.Column="1" Grid.RowSpan="4" 
              ItemTemplate="{DynamicResource AlbumsDataTemplate}"
              BorderBrush="{x:Null}"
              >
         <ie:Interaction.Triggers >
            <ie:EventTrigger EventName="SelectionChanged">
                <ie:InvokeCommandAction Command="{Binding SelectionChangedItemsAlbumCommand}" 
                        CommandParameter="{Binding SelectedItem, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListView}}}"/>
            </ie:EventTrigger>
        </ie:Interaction.Triggers>
        </ListView>

非常感谢

试试这个

在初始化属性PlayTracks后,立即执行以下操作:

ListCollectionView empView = CollectionViewSource.GetDefaultView(PlayListTracks) as ListCollectionView;
empView.Filter = IsMatchFoundAlbums;
让您的匹配方法为:

bool IsMatchFoundAlbums(object d)
{
    EmployeesTracks emp = d as EmployeesTracks;
    return SelectedPlayListFilesAlbums.Any(x => x.IdAlbums == emp.AlbumID);
}

... 你面临的问题是什么?非常感谢。你帮了我很大的忙