private void LoadUninstallableItems() { var products = ProductInstallation.GetProducts(null, "s-1-1-0", UserContexts.All).ToArray(); var installations = products .Where(ins => ins.ProductName != null) .Select(ins => new InstalledItem(ins.ProductName, ins.ProductCode, ins.InstallDate, ins.InstallLocation, ins.UrlInfoAbout, ins.ProductVersion, ins.Publisher)) .OrderBy(ins => ins.Product); _logger.Info("Found {0} installed items", installations.Count()); Items = new ObservableCollection <InstalledItem>(installations); FilteredItems = CollectionViewSource.GetDefaultView(Items); FilteredItems.Filter = ItemFilter(); FilteredItems.Refresh(); Cancelling = false; UninstallInProgress = false; UninstallCurrent = 0; UninstallTotal = 0; UninstallProgress = 0; }
public InstalledItemsViewModel(InstalledItemsView view) { _logger.Info("Startup"); _view = view; UninstallCommand = new DelegateCommand(Uninstall); CancelUninstallCommand = new DelegateCommand(CancelUninstall); SelectCommand = new DelegateCommand(SelectForUninstall); LoadUninstallableItems(); Observable.FromEventPattern <PropertyChangedEventArgs>(this, "PropertyChanged") .Where(x => x.EventArgs.PropertyName == "FilterText") .Subscribe(_ => FilteredItems.Refresh()); }
protected virtual void OnFilterItemsForDisplay(string filterString) { bool shouldRefresh = false; if (string.IsNullOrEmpty(filterString)) { foreach (ListViewItemWrapper wrapper in Items) { if (!wrapper.Visible) { wrapper.Visible = true; shouldRefresh = true; } } } else { foreach (ListViewItemWrapper wrapper in Items) { string sourceText = (!string.IsNullOrEmpty(wrapper.SearchText)) ? wrapper.SearchText : wrapper.Name; if (Contains(sourceText, filterString, StringComparison.CurrentCultureIgnoreCase)) { if (!wrapper.Visible) { wrapper.Visible = true; shouldRefresh = true; } } else { if (wrapper.Visible) { wrapper.Visible = false; shouldRefresh = true; } } } } if (shouldRefresh) { FilteredItems.Refresh(); } }
public MainViewModel() { // タイトルに表示する文字列を指定 var asm = Assembly.GetExecutingAssembly().GetName(); AppName.Value = asm.Name + " - " + asm.Version.Major + "." + asm.Version.Minor; // 表示するリスト(filteredItemsSource)のソースとフィルタの設定 FilteredItemsSource = new CollectionViewSource { Source = MemoList }; FilteredItemsSource.Filter += (s, e) => { var item = e.Item as SelfMemoItem; e.Accepted = CheckFilterStr(FilterStr.Value, item) && CheckCategoryFilter(item); }; // ファイルが有ればロードしてMemoListを更新 if (File.Exists(MemoFileName)) { SelfMemoList.LoadMemoFile(MemoList, MemoFileName); } // MemoListが空なら、ヘルプメッセージ的な項目を追加する if (SelfMemoList.ItemsList.Count == 0) { MemoList.Add(new SelfMemoItem("用語", "正式名称、別名、訳語など", "用語の解説", "カテゴリ")); MemoList.Add(new SelfMemoItem("SelfMemo", "概要", "キーワードと関連情報(訳語、正式名称、説明など)を登録し、ど忘れした時に見返しやすくするアプリです。", "本アプリの説明")); MemoList.Add(new SelfMemoItem("SelfMemo", "検索機能", "検索フォームからキーワード検索ができます。", "本アプリの説明")); MemoList.Add(new SelfMemoItem("SelfMemo", "ショートカット", "グローバルホットキー(デフォルトでAlt+Shift+F2)でいつでもアプリ起動します。", "本アプリの説明")); MemoList.Add(new SelfMemoItem("SelfMemo", "項目追加", "メニューの「登録ダイアログを開く(Ctrl+R)」からキーワードの追加ができます。", "本アプリの説明")); MemoList.Add(new SelfMemoItem("SelfMemo", "項目編集", "編集ビューから登録内容の編集ができます。", "本アプリの説明")); MemoList.Add(new SelfMemoItem("SelfMemo", "カテゴリフィルタ", "「カテゴリ」メニューでカテゴリ毎の表示フィルタリングができます。", "本アプリの説明")); } // Filter文字列が更新されたら、Filterされたアイテムリストを更新 FilterStr.Subscribe(_ => { // 既にタイマーが走ってたら、一旦止める if (FilteredItemsRefreshTimer.IsEnabled) { FilteredItemsRefreshTimer.Stop(); } // タイマー開始 FilteredItemsRefreshTimer.Interval = TimeSpan.FromMilliseconds(300); FilteredItemsRefreshTimer.Tick += (s, e) => { FilteredItems.Refresh(); FilteredItemsRefreshTimer.Stop(); }; FilteredItemsRefreshTimer.Start(); }); // Filter文字列の有無フラグを連動 UseFilterStr = FilterStr.Select(x => !string.IsNullOrWhiteSpace(x)).ToReadOnlyReactivePropertySlim(); // カテゴリ選択ComboBoxが更新されたら、Filterされたアイテムリスト更新 CategoryListSelected.Subscribe(_ => { if (!FilteredItemsRefreshTimer.IsEnabled) { FilteredItemsRefreshTimer.Interval = TimeSpan.FromMilliseconds(300); FilteredItemsRefreshTimer.Tick += (s, e) => { FilteredItems.Refresh(); FilteredItemsRefreshTimer.Stop(); }; FilteredItemsRefreshTimer.Start(); } }); // 選択項目をSelectedItemに入れる処理 FilteredItems.CurrentChanged += (s, e) => { SelectedItem.Value = FilteredItems.CurrentItem as SelfMemoItem; }; // UseCategoryListはカテゴリリストからなんか選択されてたらTrue UseCategoryList = CategoryListSelected.Select(x => !string.IsNullOrEmpty(x)).ToReadOnlyReactivePropertySlim(); // カテゴリリストのON/OFFを切り替えるタイミングでもカテゴリリストの内容更新 UseCategoryList.Subscribe(_ => { SelfMemoList.UpdateCategoryList(); }); // MemoListのコレクションが更新されたらファイルに保存 MemoList.CollectionChanged += (s, e) => { SelfMemoList.SaveMemoFile(MemoList, MemoFileName); }; WindowWidth.Subscribe(_ => { ExpanderWidth.Value = Math.Max(400, WindowWidth.Value / 2); }); }