IF.Lastfm/IF.Lastfm.Demo.Apollo/Pages/UserApi/History.xaml.cs

94 lines
2.8 KiB
C#
Raw Normal View History

using System;
using System.Collections;
using System.ComponentModel;
using System.Windows;
using System.Windows.Media;
2013-06-15 16:26:30 +01:00
using IF.Lastfm.Demo.Apollo.ViewModels.UserApi;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
2013-06-15 16:26:30 +01:00
namespace IF.Lastfm.Demo.Apollo.Pages.UserApi
{
public partial class History : PhoneApplicationPage
{
private HistoryTestViewModel _viewModel;
public History()
{
_viewModel = new HistoryTestViewModel();
DataContext = _viewModel;
InitializeComponent();
_viewModel.PropertyChanged += OnViewModelPropertyChanged;
2013-06-15 16:26:30 +01:00
Loaded += OnLoaded;
}
2013-06-15 16:26:30 +01:00
private async void OnLoaded(object sender, RoutedEventArgs e)
{
await _viewModel.NavigatedTo();
await _viewModel.GetHistory();
var element = VisualTreeHelper.GetChild(PageScroller, 0) as FrameworkElement;
if (element != null)
{
var vgroup = FindVisualState(element, "VerticalCompression");
if (vgroup != null)
{
vgroup.CurrentStateChanging += OnScrolled;
}
}
}
private void OnViewModelPropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "InProgress")
{
if (_viewModel.InProgress)
{
SystemTray.ProgressIndicator = new ProgressIndicator
{
IsVisible = _viewModel.InProgress,
IsIndeterminate = _viewModel.InProgress
};
}
else
{
SystemTray.ProgressIndicator = null;
}
}
}
private async void OnScrolled(object sender, VisualStateChangedEventArgs visualStateChangedEventArgs)
{
if (PageScroller.VerticalOffset >= PageScroller.ScrollableHeight - 10)
{
if (!_viewModel.InProgress)
{
await _viewModel.GetHistory();
}
}
}
private VisualStateGroup FindVisualState(FrameworkElement element, string name)
{
if (element == null)
2013-06-15 17:02:11 +01:00
{
return null;
2013-06-15 17:02:11 +01:00
}
IList groups = VisualStateManager.GetVisualStateGroups(element);
foreach (VisualStateGroup group in groups)
2013-06-15 17:02:11 +01:00
{
if (group.Name == name)
2013-06-15 17:02:11 +01:00
{
return group;
2013-06-15 17:02:11 +01:00
}
}
return null;
}
}
}