コード例 #1
0
        private bool FilterCDRow(object row)
        {
            if (string.IsNullOrEmpty(FilterString))
            {
                return(true);
            }

            ArtistOverviewCDItem cdItem = row as ArtistOverviewCDItem;

            if (cdItem != null)
            {
                string filterString = FilterString.ToLower();

                return(FilterTreeCDRow(cdItem, true));
            }

            ArtistOverviewCDSetItem cdSetItem = row as ArtistOverviewCDSetItem;

            if (cdSetItem != null)
            {
                string filterString = FilterString.ToLower();

                return(FilterTreeCDSetRow(cdSetItem, true));
            }

            return(true);
        }
コード例 #2
0
        internal bool FilterTreeCDSetRow(ArtistOverviewCDSetItem cdSetItem, bool withCDs)
        {
            if (string.IsNullOrEmpty(FilterString))
            {
                return(true);
            }

            string filterString = FilterString.ToLower();

            if (cdSetItem.Title.IndexOf(filterString, StringComparison.InvariantCultureIgnoreCase) >= 0)
            {
                return(true);
            }

            if (withCDs)
            {
                foreach (ArtistOverviewCDItem cdItem in cdSetItem.CDs)
                {
                    if (FilterTreeCDRow(cdItem, withCDs))
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }
コード例 #3
0
        private void TreeView_Expanded(object sender, RoutedEventArgs e)
        {
            TreeViewItem item = e.OriginalSource as TreeViewItem;

            if (item != null && item.DataContext is ArtistOverviewItem)
            {
                if (!FilterArtistRow(item.DataContext as ArtistOverviewItem))
                {
                    System.ComponentModel.ICollectionView view = CollectionViewSource.GetDefaultView(item.ItemsSource);
                    if (view != null)
                    {
                        view.Filter = new Predicate <object>(FilterCDRow);
                    }
                }
            }

            if (item != null && item.DataContext is ArtistOverviewCDSetItem)
            {
                ArtistOverviewCDSetItem cdSetItem = item.DataContext as ArtistOverviewCDSetItem;

                if (!FilterTreeCDSetRow(cdSetItem, false) && (cdSetItem.Parent == null || !FilterArtistRow(cdSetItem.Parent)))
                {
                    System.ComponentModel.ICollectionView view = CollectionViewSource.GetDefaultView(item.ItemsSource);
                    if (view != null)
                    {
                        view.Filter = new Predicate <object>(FilterCDRow);
                    }
                }
            }

            if (item != null && item.DataContext is ArtistOverviewCDItem)
            {
                ArtistOverviewCDItem cdItem = item.DataContext as ArtistOverviewCDItem;

                if (cdItem.Tracks == null || cdItem.Tracks.Count == 1 && cdItem.Tracks[0].ID == 0)
                {
                    CD cd = DataBase.GetCDById(cdItem.ID);

                    cdItem.Tracks.Clear();

                    foreach (Track track in cd.Tracks)
                    {
                        ArtistOverviewTrackItem trackItem = new ArtistOverviewTrackItem();
                        trackItem.ID        = track.ID;
                        trackItem.Title     = GetTrackTitleText(cd, track);
                        trackItem.Soundfile = track.Soundfile;

                        cdItem.Tracks.Add(trackItem);
                    }

                    item.ItemsSource = cdItem.Tracks;
                }

                if (!FilterTreeCDRow(cdItem, false) && (cdItem.Parent == null || !FilterArtistRow(cdItem.Parent)))
                {
                    System.ComponentModel.ICollectionView view = CollectionViewSource.GetDefaultView(item.ItemsSource);
                    if (view != null)
                    {
                        view.Filter = new Predicate <object>(FilterTrackRow);
                    }
                }
            }
        }