यूनिवर्सल ऐप (वर्तमान में केवल WP8.1-side पर) पर काम करते समय, मैंने निम्नलिखित अजीब चीज पर ठोकर खाई है।यूनिवर्सल ऐप - लोडिंग कम्बोबॉक्स 'आइटमसोर्स एसिंक अजीब व्यवहार देता है
मुझे कॉम्बोबॉक्स मिला है, UserControl (WindowsPhone-Project में स्थित) यह साझा प्रोजेक्ट में एक वीएम से जुड़ा हुआ है। आइटमसोर्स और चयनित इटिम दोनों वीएम में अपने संबंधित गुणों से बंधे हैं।
एप्लिकेशन चलाते समय, जब आप पहले आइटम को छोड़कर किसी भी आइटम का चयन करते हैं, तो यह पूरी तरह से काम कर रहा है। लेकिन, जब मैं पहली बार आइटम का चयन करें, स्ट्रिंग ComboBox में दिखाया गया है बजाय वी एम के .ToString()
-method ...
(Btw, यह एक साधारण List<string>
है, चयनित आइटम एक string
है पता चलता है। यह नहीं कर सकते उससे अधिक सरल हो जाओ: पी)
मैंने एक नमूना ऐप बनाया है, जिसमें केवल यह कम्बोबॉक्स और वीएम है। मैं इसे पुन: उत्पन्न करने में सक्षम था, जिस क्षण मैं असीमित रूप से आइटम्ससोर्स से जुड़ी संपत्ति भरता हूं। एक तुल्यकालिक विधि से ऐसा करते समय, यह काम करता है। लेकिन इसे एसिंक विधि से भरना उपर्युक्त समस्या प्रदान करता है।
कुछ स्क्रीनशॉट: जब यह भरा हुआ है
पहले एक एप्लिकेशन को दर्शाता है। जब संग्रह बदलता है, तो सूची का पहला तत्व चुना जाता है। यह यहाँ दिखाया गया है:
आप ComboBox पर क्लिक करते हैं, तो आप हमेशा की तरह उसके आइटम देखने को मिलता है:
आप किसी भी पहले की तुलना में अन्य तत्व पर क्लिक करें कहो, आप अभी भी मिलता है सामान्य व्यवहार:
अभी तक, सामान्य। अब पहले आइटम पर क्लिक करें।
...
मैं यह सिर्फ तार के बजाय एक वस्तु की एक सूची बनाने जैसी चीजों की एक किस्म की कोशिश की है: आप इस मिलता है। बाध्य वस्तुओं के लिए कनवर्टर जोड़ना, केवल डीबगिंग उद्देश्यों के लिए, केवल वास्तविक स्ट्रिंग-मानों को प्रकट करता है। मैं पता नहीं कैसे मिल गया है, और न ही क्यों, आबद्ध SelectedItem अचानक ComboBox की DataContext से पता चलता ...
आप यहाँ नमूना एप्लिकेशन को डाउनलोड कर सकते हैं: http://1drv.ms/1DhklCQ
(कोई बाइनरी, बस कोड शामिल हैं)किसी को भी कोई विचार मिला है?
संपादित करें: कोड इस समस्या को ठीक करने के लिए आवश्यक:
एक खाली यूनिवर्सल स्टोर ऐप्स (8.1) बनाएँ। विंडोजफोन परियोजना में, फ़ाइल MainPage.xaml: मैंने एक साधारण combobox जोड़ा है, और लोडेड ईवेंट पकड़ो।
<ComboBox ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}" />
इसके पीछे कोड में। मैंने डेटाकॉन्टेक्स्ट को वीएम में असाइन किया है। और लोडेड इवेंट में मैं अजीब रूप से वीएम को बुलाता हूं।LoadData()
private VM _vm = new VM();
public MainPage()
{
this.InitializeComponent();
this.DataContext = _vm;
}
private async void Page_Loaded(object sender, RoutedEventArgs e)
{
await _vm.LoadDataAsync();
}
के रूप में पालन वीएम वस्तु परिभाषित किया गया है:
public class VM : INotifyPropertyChanged
{
private List<string> _items;
public List<string> Items
{
get { return _items; }
set
{
_items = value;
_selectedItem = _items.FirstOrDefault();
RaisePropertyChanged("Items");
RaisePropertyChanged("SelectedItem");
}
}
private string _selectedItem;
public string SelectedItem
{
get { return _selectedItem; }
set
{
_selectedItem = value;
RaisePropertyChanged("SelectedItem");
}
}
public VM()
{
}
public async Task LoadDataAsync()
{
this.Items = new List<string>()
{
"a",
"b",
"c",
"d",
"e",
"f",
};
}
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged(string propName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propName));
}
}
}
आप यहां कोड क्यों पोस्ट नहीं करते? – Sajeetharan
मैंने मूल पोस्ट में कोड जोड़ा है। –
इसके लायक होने के लिए, हमारे पास हमारे एप्लिकेशन में भी एक ही समस्या है, जो कई एसिंक पैटर्न का उपयोग करती है। हमारा निष्कर्ष यह है कि यह कॉम्बोबॉक्स के साथ एक बग है। –