拉到刷新在Windows Phone上

我正在尝试在我的Windows手机应用程序上实现拉动刷新,

我试过这个样本: http : //code.msdn.microsoft.com/wpapps/TwitterSearch-Windows-b7fc4e5e但是当我想编译项目时我有这个错误:

名称空间“clr-namespace:TwitterSample.ViewModels”中不存在TwitterViewModel

但是在xaml中正确引用了程序集:

xmlns:vm="clr-namespace:TwitterSample.ViewModels" 

我怎么能纠正这个?

看看这个: WP8PullToRefreshDetector.cs

 using Microsoft.Phone.Controls; using System; using System.Windows.Controls.Primitives; ///  /// This class detects the pull gesture on a LongListSelector. How does it work? /// /// This class listens to the change of manipulation state of the LLS, to the MouseMove event /// (in WP, this event is triggered when the user moves the finger through the screen) /// and to the ItemRealized/Unrealized events. /// /// Listening to MouseMove, we can calculate the amount of finger movement. That is, we can /// detect when the user has scrolled the list. /// /// Then, when the ManipulationState changes from Manipulating to Animating (from user /// triggered movement to inertia movement), we check the viewport changes. The viewport is /// only constant when the user scrolls beyond the end of the list, either at the top or at the bottom. /// If no items were added, check the direction of the scroll movement and fire the corresponding event. ///  public class WP8PullDetector { LongListSelector listbox; bool viewportChanged = false; bool isMoving = false; double manipulationStart = 0; double manipulationEnd = 0; public bool Bound { get; private set; } public void Bind(LongListSelector listbox) { Bound = true; this.listbox = listbox; listbox.ManipulationStateChanged += listbox_ManipulationStateChanged; listbox.MouseMove += listbox_MouseMove; listbox.ItemRealized += OnViewportChanged; listbox.ItemUnrealized += OnViewportChanged; } public void Unbind() { Bound = false; if (listbox != null) { listbox.ManipulationStateChanged -= listbox_ManipulationStateChanged; listbox.MouseMove -= listbox_MouseMove; listbox.ItemRealized -= OnViewportChanged; listbox.ItemUnrealized -= OnViewportChanged; } } void OnViewportChanged(object sender, Microsoft.Phone.Controls.ItemRealizationEventArgs e) { viewportChanged = true; } void listbox_MouseMove(object sender, System.Windows.Input.MouseEventArgs e) { var pos = e.GetPosition(null); if (!isMoving) manipulationStart = pos.Y; else manipulationEnd = pos.Y; isMoving = true; } void listbox_ManipulationStateChanged(object sender, EventArgs e) { if (listbox.ManipulationState == ManipulationState.Idle) { isMoving = false; viewportChanged = false; } else if (listbox.ManipulationState == ManipulationState.Manipulating) { viewportChanged = false; } else if (listbox.ManipulationState == ManipulationState.Animating) { var total = manipulationStart - manipulationEnd; if (!viewportChanged && Compression != null) { if (total < 0) Compression(this, new CompressionEventArgs(CompressionType.Top)); else if(total > 0) // Explicitly exclude total == 0 case Compression(this, new CompressionEventArgs(CompressionType.Bottom)); } } } public event OnCompression Compression; } public class CompressionEventArgs : EventArgs { public CompressionType Type { get; protected set; } public CompressionEventArgs(CompressionType type) { Type = type; } } public enum CompressionType { Top, Bottom, Left, Right }; public delegate void OnCompression(object sender, CompressionEventArgs e); 

用法:

 public Page1() { InitializeComponent(); var objWP8PullDetector = new WP8PullDetector(); objWP8PullDetector.Bind(objLongListSelector); //objWP8PullDetector.Unbind(); To unbind from compression detection objWP8PullDetector.Compression += objWP8PullDetector_Compression; } void objWP8PullDetector_Compression(object sender, CompressionEventArgs e) { //TODO: Your logic here }