मेरे पास एक निर्माता के साथ एक दृश्य मॉडल है जिसके लिए एक सेवा की आवश्यकता है। मैं गैलासोफ्ट के एमवीएमएमलाइट का उपयोग कर रहा हूं जो व्यू मॉडल को देखने के लिए एक सेवा लोकेटर का उपयोग करता है।एमवीवीएम व्यू मॉडल और एसिंक डेटा प्रारंभिकरण
सरल आईओसी व्यूमोडल्स कन्स्ट्रक्टर ठीक करने के लिए सेवा प्रदान करता है, लेकिन मुझे किसी भी तरह से डेटा स्रोत से डेटा के साथ अपने व्यूमोडेल को पॉप्युलेट करने की आवश्यकता है। मेरे ViewModel इस तरह एक लग रहा है: -
public class MainPageViewModel : ViewModelBase
{
private readonly GroupService _groupService;
private readonly GroupFactory _groupFactory;
private readonly ObservableCollection<GroupVM> _groupVms = new ObservableCollection<GroupVM>();
public MainPageViewModel(Domain.Services.GroupService groupService, VMFactories.GroupFactory groupFactory)
{
_groupService = groupService;
_groupFactory = groupFactory;
}
public async Task Init()
{
var groups = await _groupService.LoadGroups();
foreach (var group in groups)
{
GroupVms.Add(_groupFactory.Create(group));
}
}
public ObservableCollection<GroupVM> GroupVms { get { return _groupVms; } }
}
किसी तरह init विधि एक बहुप्रतीक्षित कॉल किया जाना चाहिए, लेकिन मैं कैसे सबसे अच्छा यह करने के लिए पता नहीं है? मैं तीन विकल्प के बारे में सोच सकते हैं: -
- मैं सिर्फ निर्माता पर Init फोन, लेकिन नहीं यह इंतजार है (मैं thats पता वास्तव में बुरा व्यवहार)
- मैं ViewModelLocator वस्तु पर Init कहते हैं, लेकिन जब से मैं नहीं कर सकता एक कार्य वापस करें मैं फिर से init का इंतजार नहीं कर सकता
- दृश्य के लोड पर मैंने डेटाकॉन्टेक्स्ट को किसी प्रकार के IAsyncViewmodel पर डाला और init विधि का इंतजार किया।
मैंने पिछले विंडोज 8 स्टोर प्रोजेक्ट में विकल्प 3 का उपयोग किया है, लेकिन यह गलत लगता है। किसी भी सलाह की वास्तव में सराहना की जाएगी!
धन्यवाद
रॉस
अच्छा बिंदु, यह उन चीज़ों में से एक था जो मैंने लिया था लेकिन वास्तव में इसके बारे में सोचा नहीं था। यहां इसके बारे में कुछ और जानकारी है: http://stackoverflow.com/questions/7261173/c-sharp-start-async-method-within-object-constructor-bad-practice मूल रूप से ऐसा इसलिए होता है क्योंकि जब वस्तु का निर्माण होता है तो यह अभी भी " सामान कर रहे हैं "शायद अप्रत्याशित रूप से, साथ ही अपवादों को संभालना बहुत मुश्किल है। मैंने दोनों तरीकों की कोशिश की है, और मुझे लगता है कि मैं निर्माता में init पसंद करते हैं, लेकिन अभी भी यकीन नहीं है! –
टिप: विजुअल स्टूडियो में 'squigglies' से बचने के लिए बस लौटा कार्य के मूल्य को एक डमी चर पर असाइन करें –