2012-05-04 10 views
5

क्यों अनदेखा करता है मैं कुछ आइटम प्रदर्शित करने और एक विशिष्ट आइटम दिखाना शुरू करने के लिए फ़्लिप व्यू का उपयोग करना चाहता हूं।FlipView चयनित इटिम

इस के लिए, मैं एक दृश्य मॉडल वर्ग को परिभाषित किया है:

class MyDataContext 
{ 

    public MyDataContext() 
    { 
     Items = new List<MyClass>(); 
     Items.Add(new MyClass("1")); 
     Items.Add(new MyClass("2")); 
     Items.Add(new MyClass("3")); 
     SelectedItem = Items[1]; 
    } 

    public List<MyClass> Items { get; set; } 
    public MyClass SelectedItem { get; set; } 
} 

आप देख सकते हैं, चयनित आइटम नहीं पहले आइटम है।

अब XAML के लिए

:

<FlipView ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}"></FlipView> 

हालांकि, जब मैं अनुप्रयोग चलाने, फ्लिप दृश्य पहले आइटम, नहीं दूसरे मद को दर्शाता है।

क्या यह जानबूझकर है ?, या यह एक बग है?

+0

यह चयनित इंडेक्स को भी अनदेखा करता है। मैं WinRT पर किसी भी तरह से FlipView पर चयन सेट करने में असमर्थ हूं। क्या आपने इस मुद्दे को किसी भी तरह हल किया? – hendrix

उत्तर

10

इस

<FlipView 
    ItemsSource="{Binding Items}" 
    SelectedItem="{Binding SelectedItem, Mode=TwoWay}" /> 
  • अपने SelectedItem यह काम करने के लिए एक TwoWay के बाद से मूल्य दोनों नियंत्रण और दृश्य मॉडल के आधार पर सेट किया जाता है बंधन, होने की जरूरत है की कोशिश करो।
+0

मेरी समस्या हल हो गई। धन्यवाद! –

1

फिलिप ने जो कहा, उसके ऊपर क्लास (MyDataContext) को यूआई को सूचित करने की आवश्यकता है कि संपत्ति बदल गई है। आपका ViewModel INotifyPropertyChanged और संपत्ति को लागू करना चाहिए PropertyChanged ईवेंट सक्रिय करने

public class ViewModel : INotifyPropertyChanged 
{ 
    private object _selectedItem; 

    public object SelectedItem 
    { 
     get { return _selectedItem; } 
     set 
     { 
      _selectedItem = value; 
      OnPropertyChanged("SelectedItem"); 
     } 
    } 
} 

तुम भी BindableBase वर्ग कि नमूना क्षुधा

public class ViewModel : BindableBase 
{ 
    private object _selectedItem; 

    public object SelectedItem 
    { 
     get { return this._selectedItem; } 
     set { this.SetProperty(ref this._selectedItem, value); } 
    } 
} 
5

FlipView और के साथ एक ही समस्या आ रहा था के साथ आता है का उपयोग कर सकते काम करने के लिए बाइंडबलबेस या दोवे विकल्प प्राप्त करने में असमर्थ। चूंकि सूची का क्रम वास्तव में मेरे लिए कोई विषय नहीं था, इसलिए मैंने संग्रह में पहली वस्तु होने के रूप में चयनित इटैम के साथ शुरू करने के लिए आइटम्ससोर्स को पुन: व्यवस्थित करने के लिए एक विधि बनाई है।

अंतर्निहित कोड में, परिणाम पिछले सूची तत्वों के बजाय फ़्लिप व्यू के लिए नया आइटम स्रोत है।

public static List<T> ReorderList(List<T> elements, T selectedElement) 
    { 
     var elementIndex = elements.FindIndex(x => x.Id == selectedElement.Id); 
     var result = new List<T>(); 

     foreach (var item in elements) 
     { 
      if (elementIndex .Equals(elements.Count)) 
      { 
       elementIndex = 0; 
      } 

      result.Add(elements[elementIndex]); 

      elementIndex++; 
     } 

     return result; 
    } 
+0

+1, मैं वर्तमान में इस कामकाज का उपयोग कर रहा हूं, लेकिन यह केवल अस्थायी समाधान है। – hendrix

0

यह एक बग की तरह दिखता है। यदि आप अपना कोड डीबग करते हैं तो आपको पता चलेगा कि पहले SelectedItem वीएम में सही तत्व पर सेट है, तो यह null पर सेट होता है और उसके बाद यह फ्लिपव्यू के आइटम्ससोर्स संग्रह के पहले तत्व पर सेट होता है।

एक वर्कअराउंड के रूप में मैं फ्लिप व्यू के लोड किए गए ईवेंट के बाद वीएम के चयनित इटैम को सेट करना देखता हूं।

संबंधित मुद्दे