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())); }); }
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())); }); }