WP8 में पैनोरमा नियंत्रण एक ज्ञात डेटाबेसिंग बग है। बग के लक्षण यह हैं कि चयन चेंज नहीं किया जाता है, चयनित इंडेक्स & चयनित इटैम विश्वसनीय नहीं है और पैनोरमा के साथ एक पृष्ठ में वापस नेविगेशन पैनोरमा चयनित आइटम को रीसेट करता है।
उदाहरण के लिए, निम्न कोड नमूना कभी भी संदेशबॉक्स और चयनित इंडेक्स & को फ़ायर नहीं करेगा चयनित इटैम सही अपेक्षित मानों को इंगित नहीं करेगा।
<phone:Panorama x:Name="panorama"
ItemsSource="{Binding}"
SelectionChanged="Panorama_SelectionChanged_1">
<phone:Panorama.HeaderTemplate>
<DataTemplate>
<ContentControl Content="{Binding Name}" />
</DataTemplate>
</phone:Panorama.HeaderTemplate>
<phone:Panorama.ItemTemplate>
<DataTemplate>
<ContentControl Content="{Binding Name}" />
</DataTemplate>
</phone:Panorama.ItemTemplate>
</phone:Panorama>
private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
this.DataContext = new ObservableCollection<Cow>()
{
new Cow("Foo"),
new Cow("Bar"),
new Cow("Baz")
};
}
private void Panorama_SelectionChanged_1(object sender, SelectionChangedEventArgs e)
{
MessageBox.Show("Panorama_SelectionChanged_1: " + panorama.SelectedIndex);
}
public class Cow
{
public Cow(string name)
{
Name = name;
}
public string Name { get; set; }
}
एक स्पष्ट ठीक मैन्युअल में कोड-पीछे PanoramaItems प्रारंभ करने में किया जाएगा।
एक और समाधान हमारे संग्रह को टाइप किए गए से अलग करने के लिए बदलना होगा, और हमारे कोडित डेटा वर्ग में निम्न कोड स्निपेट जोड़ें। तो चलो ObservableCollection<object>
को ObservableCollection<Cow>
से हमारे कोड बदल सकते हैं और Cow
वर्ग के लिए कुछ कोड जोड़ने:
:
private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
this.DataContext = new ObservableCollection<object>()
{
new Cow("Foo"),
new Cow("Bar"),
new Cow("Baz")
};
}
public class Cow
{
public Cow(string name)
{
Name = name;
}
public string Name { get; set; }
public override bool Equals(object obj)
{
if ((obj != null) && (obj.GetType() == typeof(PanoramaItem)))
{
var thePanoItem = (PanoramaItem)obj;
return base.Equals(thePanoItem.Header);
}
else
{
return base.Equals(obj);
}
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
अब, जब हम इस कोड स्निपेट हम SelectionChanged आग देख सकते हैं सही SelectedIndex मूल्यों के साथ अपेक्षित तरीके से चलना जो एक पोर्टेबल कक्षा लाइब्रेरी में ViewModel है किसी के लिए भी
आपकी प्रतिक्रिया के लिए धन्यवाद। आप एक छोटे से ऐप पर काम करते हैं, लेकिन कुछ और शामिल होने के साथ दर्द का थोड़ा सा हो सकता है। कोई विचार जब यह तय किया जाएगा? – Brandon
मैंने अभी परीक्षण किया है और अब चयन परिवर्तन घटना अब WP8 में काम कर रही है। – Sopuli