2011-02-28 21 views
5

Bir takvim türü uygulaması için Pivot denetimini kullanmaya çalışıyorum; burada her Pivot görünümü geçerli güne ilişkin bazı bilgiler gösterir. Kullanıcı ileri doğru hareket ettiğinde, ertesi gün gösterilir. Bunu, iyi çalışan Pivot Öğe koleksiyonunun sonuna öğeler ekleyerek uyguladım.Sonsuz Pivot Kontrolü

Sorun, kullanıcı bir önceki güne geri gitmeye çalıştığında oluşur. Bu durumda, Pivot öğe koleksiyonunun başında yeni bir öğe eklenir. Ekleme çalışmaları olsa da, gösterilen Pivot öğesi her zaman yanlış olanıdır (yani yeni eklenen öğe). Pivot kontrolünde SelectedItem ayarının yapılması yardımcı olmaz.

Ben Pivot benim görev için doğru kumanda olmayabilir düşünüyorum, peki görünümü hakkında herhangi bir yardım kullanabilir veya Pivot son derece takdir edilmektedir benim yukarıda belirtilen sorunu çözmek nasıl. Bir gün ileri/geri gitmeyi uygulayan Viewmodel için

kodu. Pages Pivot ItemSource'a bağlanır.

public class TrackDayViewModel : HubViewModelBase 
{ 
    private DateTime _CurrentDay; 
    public DateTime CurrentDay 
    { 
     get { return _CurrentDay; } 
     set 
     { 
      if (value.CompareTo (_CurrentDay) != 0) 
      { 
       _CurrentDay = value; 
       OnPropertyChanged("CurrentDay"); 
      } 
     } 
    } 

    public TrackDayViewModel() 
    { 
     var day = DateTime.Now; 

     CurrentDay = day.Midnight(); 

     Pages.Add(new DayViewModel(CurrentDay.AddDays(-1))); 
     Pages.Add(new DayViewModel(CurrentDay)); 
     Pages.Add(new DayViewModel(CurrentDay.AddDays(1))); 

     SelectedItem = Pages[1]; 

     this.PropertyChanged += (s, e) => 
     { 
      if (e.PropertyName == "SelectedItem") 
      { 
       var si = SelectedItem as DayViewModel; 

       if (si != null) 
       { 
        var idx = Pages.IndexOf(SelectedItem); 
        if (idx==0) 
        { 
         Pages.Insert(0, new DayViewModel(si.Day.AddDays(-1))); 
         SelectedItem = Pages[1]; 
        } 
        else if (idx == (Pages.Count - 1)) 
        { 
         Pages.Add(new DayViewModel(si.Day.AddDays(1))); 
        } 
       } 
      } 
     }; 
    } 
} 

DÜZENLEME: benim sorun çözüldü Değişikliği: Bunun için

 this.PropertyChanged += (s, e) => 
     { 
      if (e.PropertyName == "SelectedItem") 
      { 
       var si = SelectedItem as DayViewModel; 

       if (si != null) 
       { 
        var idx = Pages.IndexOf(SelectedItem); 

        int nextIdx = (idx + 1) % 3; 
        int prevIdx = ((idx - 1)<0) ? 2 : (idx-1); 

        Pages[nextIdx] = new DayViewModel(si.Day.AddDays(1)); 
        Pages[prevIdx] = new DayViewModel(si.Day.AddDays(-1)); 
       } 
      } 
     }; 

cevap

5

, ben 4 sayfalık bir Pivot kontrolünü kullanmayı tercih ediyorum. Herhangi bir anda

, önceki, şimdiki ve sonraki sayfalar doğru verileri içerir - ve her zaman bir (boş) sayfasına sahip olacaktır

geçerli sayfa değişiyor ve sahip olduğunda Ardından olaylara yanıt verebilir değiştirildi - geçerli (boş) sayfayı doğru yeni içeriğe ayarlamak ve ardından yeni (boş) sayfayı temizlemek için bu etkinlikleri kullanın.

+1

teşekkürler, cevabınız beni doğru yöne doğru yönlendirdi, sorduğum kodu kullandım koduyla – thumbmunkeys

1

Pivot kontrolü için yönergeler, 6'dan fazla sayfanız varsa önlenmesi gerektiğini belirtir.

Söz konusu sınırsız sayfa için bunu kullanın.

Öneririm, ileri ve geri çevirme için dokunma hareketleri yardımıyla TransitioningContentControl kullanıyor. TransitioningContentControl, içeriği değiştirilirken animasyonu kullanmanıza olanak tanır.

+0

cevabınız için teşekkürler, çözümümün Pivot'un bir kötüye kullanımı olduğunu biliyorum, ama işe yarıyor gibi görünüyor. – thumbmunkeys