public MainWindowViewModel(DataRepository repo)
        {
            this.repo = repo.ThrowIfNull();

            feeds = new ObservableCollection<FeedViewModel>(
                repo.AllFeeds().Select(feed => new FeedViewModel(repo, feed)));
            feedItems = new ObservableCollection<FeedItemViewModel>(
                repo.AllFeedItems().Select(feedItem => new FeedItemViewModel(feedItem)));

            FeedsView = CollectionViewSource.GetDefaultView(feeds);
            FeedsView.CurrentChanged += HandleFeedsViewCurrentChanged;

            FeedItemsView = CollectionViewSource.GetDefaultView(feedItems);
            FeedItemsView.Filter = FeedItemsViewFilter;
            FeedItemsView.SortDescriptions.Add(new SortDescription("PublishDate",
                                                                   ListSortDirection.Descending));

            NewFeedCommand = new RelayCommand(param => NewFeed());
            ModifyFeedCommand = new RelayCommand(param => ModifyFeed());
            ClearFeedItemsFilterCommand = new RelayCommand(param => ClearFeedItemsFilter());

            repo.FeedAdded += HandleFeedAdded;
            repo.FeedModified += HandleFeedModified;
            repo.FeedDeleted += HandleFeedDeleted;
            repo.FeedItemsAdded += HandleFeedItemsAdded;

            FeedsView.MoveCurrentTo(null);
        }
 public FeedViewModel(DataRepository repo, Feed feed) : base(feed)
 {
     this.repo = repo.ThrowIfNull();
     ProcessFeedCommand = new RelayCommand(param => ProcessFeed(), param => true);
     SaveFeedCommand = new RelayCommand(param => SaveFeed(), param => true);
     DeleteFeedCommand = new RelayCommand(param => DeleteFeed());
 }