Beispiel #1
0
        public PodcastView()
        {
            InitializeComponent();

            this.WhenActivated(d =>
            {
                d(this.OneWayBind(ViewModel, vm => vm.EpisodeList, v => v.Episodes.ItemsSource));
                d(this.OneWayBind(ViewModel, vm => vm.ChannelView, v => v.Channels.ItemsSource));

                d(this.OneWayBind(ViewModel, vm => vm.IsEpisodesBusy, x => x.EpisodesBusyOverlay.Visibility));
                d(this.OneWayBind(ViewModel, vm => vm.IsChannelsBusy, x => x.ChannelsBusyOverlay.Visibility));
                d(this.Bind(ViewModel, vm => vm.SelectedEpisode, x => x.Episodes.SelectedItem));
                d(this.Bind(ViewModel, vm => vm.SelectedChannel, x => x.Channels.SelectedItem));
                d(this.BindCommand(ViewModel, vm => vm.OpenUrlDialogCommand, v => v.AddChannelButton));
                d(this.BindCommand(ViewModel, vm => vm.RemoveFilterCommand, v => v.RemoveFilterButton));
                d(this.BindCommand(ViewModel, vm => vm.UpdateChannelsCommand, v => v.Update));

                d(this.OneWayBind(ViewModel, vm => vm.UrlDialogIsOpen, v => v.OpenUrlOverlay.Visibility));

                d(this.OneWayBind(ViewModel, vm => vm.CurrentDetailEntity, v => v.Detail.DetailEntity));

                // placeholders
                d(this.WhenAnyValue(_ => _.Channels.Items.IsEmpty)
                  .CombineLatest(this.WhenAnyValue(_ => _.ViewModel.IsChannelsBusy), (x, y) => x && !y)
                  .DistinctUntilChanged().BindTo(this, _ => _.ChannelsPlaceholder.Visibility));

                d(this.WhenAnyValue(_ => _.Episodes.Items.IsEmpty)
                  .CombineLatest(this.WhenAnyValue(_ => _.ViewModel.IsEpisodesBusy), (x, y) => x && !y)
                  .DistinctUntilChanged().BindTo(this, _ => _.EpisodesPlaceholder.Visibility));

                d(this.WhenAnyValue(_ => _.ViewModel).BindTo(this, _ => _.DragDropBehavior.ListManager));

                // context menu is handled
                d(EventsMixin.Events(Channels).PreviewMouseRightButtonDown.Subscribe(e => e.Handled = true));

                // search
                d(this.WhenAnyValue(_ => _.SearchIcon.IsChecked).Subscribe(ToggleSearch));
                d(this.WhenAnyValue(_ => _.FilterTextBox.Text).Throttle(TimeSpan.FromSeconds(.5))
                  .BindTo(ViewModel, _ => _.EpisodeFilterText));

                d(this.WhenAnyValue(_ => _.SearchIcon.IsChecked).Subscribe(ToggleSearch));

                d(ViewModel.ScrollIntoView.Subscribe(BringEpisodeIntoView));

                // episode sort order
                d(this.OneWayBind(ViewModel, vm => vm.EpisodeSortOrders, v => v.EpisodeOrder.ItemsSource));
                d(this.Bind(ViewModel, vm => vm.SelectedEpisodeSortOrder, v => v.EpisodeOrder.SelectedItem));
                d(this.Bind(ViewModel, vm => vm.IsSortOrderDescending, v => v.SortDirection.IsChecked));
                d(this.BindCommand(ViewModel, _ => _.ToggleSortDirectionCommand, _ => _.SortDirection));

                // Detail
                // .. visibility
                d(this.WhenAnyValue(_ => _.DetailColumn.Width).Select(_ => _.Value > 5).DistinctUntilChanged()
                  .BindTo(ViewModel, _ => _.IsDetailVisible));
                d(this.OneWayBind(ViewModel, _ => _.IsDetailVisible, _ => _.Detail.Visibility));

                // toggle Detail button
                d(this.BindCommand(ViewModel, _ => _.ToggleShowDetailCommand, _ => _.ShowDetailButton,
                                   _ => _.IsDetailVisible));
                // .. command
                d(this.WhenAnyObservable(_ => _.ViewModel.ToggleShowDetailCommand)
                  .BindTo(this, b => b.ColumnGridBehavior.ToggleDetail));
                // .. isChecked
                d(this.Bind(ViewModel, _ => _.IsDetailVisible, _ => _.ShowDetailButton.IsChecked));
                // .. isEnabled
                d(this.WhenAny(_ => _.Detail.DetailEntity, _ => _.Value != null).DistinctUntilChanged()
                  .BindTo(this, _ => _.ShowDetailButton.IsEnabled));
                // Detail splitter visibility
                d(this.WhenAny(_ => _.ViewModel.SelectedEpisode, _ => _.Value != null).DistinctUntilChanged()
                  .BindTo(this, _ => _.DetailSplitter.IsEnabled));

                // save column settings
                d(this.WhenAnyObservable(_ => _.ViewModel.DeactivateCommand)
                  .Subscribe(_ => ColumnGridBehavior.SaveSettings()));
            });
        }
Beispiel #2
0
        public PlaylistView()
        {
            InitializeComponent();

            this.WhenActivated(d =>
            {
                d(this.OneWayBind(ViewModel, vm => vm.PlaylistItems, v => v.PlaylistItems.ItemsSource));
                d(this.OneWayBind(ViewModel, vm => vm.PlaylistView, v => v.Playlists.ItemsSource));

                d(this.OneWayBind(ViewModel, vm => vm.SelectedPlaylist.Name, v => v.PlaylistItemsHeader.Text));

                // busy overlays
                d(this.OneWayBind(ViewModel, vm => vm.IsPlaylistsBusy, x => x.PlaylistsBusyOverlay.Visibility));
                d(this.OneWayBind(ViewModel, vm => vm.IsPlaylistItemsBusy, x => x.ItemsBusyOverlay.Visibility));

                // placeholders
                d(
                    this.WhenAnyValue(_ => _.Playlists.Items.IsEmpty)
                    .CombineLatest(this.WhenAnyValue(_ => _.ViewModel.IsPlaylistsBusy), (x, y) => x && !y)
                    .DistinctUntilChanged()
                    .BindTo(this, _ => _.PlaylistsPlaceholder.Visibility));

                d(
                    this.WhenAnyValue(_ => _.PlaylistItems.Items.IsEmpty)
                    .CombineLatest(this.WhenAnyValue(_ => _.ViewModel.IsPlaylistItemsBusy), (x, y) => x && !y)
                    .DistinctUntilChanged()
                    .BindTo(this, _ => _.PlaylistItemsPlaceholder.Visibility));

                d(this.Bind(ViewModel, vm => vm.SelectedPlaylistItem, _ => _.PlaylistItems.SelectedItem));
                d(this.Bind(ViewModel, vm => vm.SelectedPlaylist, _ => _.Playlists.SelectedItem));
                d(this.BindCommand(ViewModel, vm => vm.AddPlaylistCommand, v => v.AddPlaylistButton));
                //d(this.BindCommand(ViewModel, vm => vm.RemoveFilterCommand, v => v.RemoveFilterButton));

                d(this.OneWayBind(ViewModel, vm => vm.CurrentDetailEntity, v => v.Detail.DetailEntity));

                d(this.WhenAnyValue(_ => _.ViewModel).BindTo(this, _ => _.DragDropBehavior.ListManager));

                // context menu is handled
                d(EventsMixin.Events(Playlists).PreviewMouseRightButtonDown.Subscribe(e => e.Handled = true));

                // search
                d(this.WhenAnyValue(_ => _.SearchIcon.IsChecked).Subscribe(ToggleSearch));
                d(this.WhenAnyValue(_ => _.FilterTextBox.Text)
                  .Throttle(TimeSpan.FromSeconds(.5))
                  .BindTo(ViewModel, _ => _.PlaylistItemFilterText));

                //d(this.WhenAnyValue(_ => _.SearchIcon.IsChecked).Subscribe(ToggleSearch));

                d(ViewModel.ScrollIntoView.Subscribe(BringItemIntoView));

                // Detail
                // .. visibility
                d(
                    this.WhenAnyValue(_ => _.DetailColumn.Width)
                    .Select(_ => _.Value > 5)
                    .DistinctUntilChanged()
                    .BindTo(ViewModel, _ => _.IsDetailVisible));
                d(this.OneWayBind(ViewModel, _ => _.IsDetailVisible, _ => _.Detail.Visibility));

                // toggle Detail button
                d(this.BindCommand(ViewModel, _ => _.ToggleShowDetailCommand, _ => _.ShowDetailButton,
                                   _ => _.IsDetailVisible));
                // .. command
                d(this.WhenAnyObservable(_ => _.ViewModel.ToggleShowDetailCommand)
                  .BindTo(this, b => b.ColumnGridBehavior.ToggleDetail));
                // .. isChecked
                d(this.Bind(ViewModel, _ => _.IsDetailVisible, _ => _.ShowDetailButton.IsChecked));
                // .. isEnabled
                d(this.WhenAny(_ => _.Detail.DetailEntity, _ => _.Value != null)
                  .DistinctUntilChanged()
                  .BindTo(this, _ => _.ShowDetailButton.IsEnabled));
                // Detail splitter visibility
                d(
                    this.WhenAny(_ => _.ViewModel.SelectedPlaylistItem, _ => _.Value != null)
                    .DistinctUntilChanged()
                    .BindTo(this, _ => _.DetailSplitter.IsEnabled));

                // save column settings
                d(
                    this.WhenAnyObservable(_ => _.ViewModel.DeactivateCommand)
                    .Subscribe(_ => ColumnGridBehavior.SaveSettings()));
            });
        }