/// <summary>
        /// フィルタ用にDBからベースとなるデータを取得する。
        /// </summary>
        /// <param name="item">サイト情報</param>
        /// <remarks>
        /// DBから毎回読み込むのがいいか
        /// Feedの読み込み枚にベースとなるデータをローカルに保持していた方がいいのか
        /// </remarks>
        private IEnumerable <FeedItem> GetMasterData(RssSiteInfo item)
        {
            Int32 masterID = item.ID;
            IEnumerable <FeedItem> feedItems = null;

            using (var db = new SQLite(MASTER_PATH)) {
                db.Open();

                // リスト・DBの更新
                feedItems = GetFeedItems(db, feedItems, masterID, LISTBOX_UPDATE);
            }
            return(feedItems);
        }
        /// <summary>
        /// 条件による絞り込み処理を実行する
        /// </summary>
        /// <param name="item">サイト情報</param>
        /// <param name="key">フィルタリングするワード</param>
        /// <param name="date">フィルタリングする日付</param>
        /// <param name="isRead">フィルタリングする既読・未読状態</param>
        private void FilteringItems(RssSiteInfo item,
                                    String key, DateTime?date, String isRead)
        {
            var   source   = GetMasterData(item);
            Int32 srcCount = source.Count();

            if (source == null)
            {
                return;
            }

            try {
                // キーワードフィルタ
                if (!String.IsNullOrEmpty(key))
                {
                    source = source.Where(x =>
                                          0 <= x.Title.IndexOf(key));
                }
                // 日付フィルタ
                if (date != null)
                {
                    source = source.Where(x =>
                                          date?.Date == DateTime.Parse(x.PublishDate).Date);
                }
                // 既読・未読フィルタ
                if (Enum.TryParse(isRead, out ReadState state))
                {
                    switch (state)
                    {
                    case ReadState.Read:
                        source = source.Where(x => x.IsRead);
                        break;

                    case ReadState.Unread:
                        source = source.Where(x => !x.IsRead);
                        break;
                    }
                }
                // 無駄に更新しないように
                if (srcCount != source.Count())
                {
                    this.FeedList.ItemsSource = source;
                }
            }
            catch (Exception) {
            }
        }
        /// <summary>
        /// RSS フィードリストの更新を行う
        /// </summary>
        /// <param name="item">サイト情報</param>
        /// <param name="isListUpdate">ListBoxの表示を更新するか</param>
        private void UpdateListBox(RssSiteInfo item, Boolean isListUpdate)
        {
            String url = item?.Link;

            if (url == null)
            {
                return;
            }

            Int32 masterID = item.ID;
            IEnumerable <FeedItem> feedItems = null;

            if (!IsOnline())
            {
                // インターネット接続が無いため、強制的にオフラインモードに設定
                App.Configure.IsOffLine = true;
            }

            using (var db = new SQLite(MASTER_PATH)) {
                db.Open();

                // 更新間隔の確認とOffLineモードオプションを確認する
                if (CanRSSRead(db, masterID) && !(App.Configure?.IsOffLine ?? false))
                {
                    // フィードデータダウンロード
                    feedItems = RSS.ReadFeedItems(url);
                    // ダウンロード時刻アップデート
                    UpdateLastSync(db, masterID);
                }

                // リスト・DBの更新
                var items = GetFeedItems(db, feedItems, masterID, isListUpdate);
                if (isListUpdate)
                {
                    this.FeedList.ItemsSource = items;
                }
            }
        }