के साथ एंटीटी फ्रेमवर्क का उपयोग करने के लिए सर्वोत्तम प्रथाएं मैं अपना पहला वास्तविक WPF एप्लिकेशन (यानी, मेरे अलावा किसी के द्वारा उपयोग किए जाने वाले पहले व्यक्ति) को बनाने की प्रक्रिया में हूं, और मैं अभी भी अपने सिर को लपेट रहा हूं डब्ल्यूपीएफ में चीजों को करने का सबसे अच्छा तरीका। यह अभी भी काफी नए एंटिटी फ्रेमवर्क का उपयोग करके एक काफी सरल डेटा एक्सेस एप्लिकेशन है, लेकिन मैं इन दो तकनीकों (डब्ल्यूपीएफ और ईएफ) को एक साथ उपयोग करने के सर्वोत्तम तरीके के लिए ऑनलाइन बहुत सारे मार्गदर्शन नहीं ढूंढ पा रहा हूं। तो मैंने सोचा कि मैं टॉस आउट करूँगा कि मैं इसे कैसे देख रहा हूं, और देखें कि किसी के पास कोई बेहतर सुझाव है या नहीं।WPF डेटा बाइंडिंग
मैं एसक्यूएल सर्वर 2008 एफई मुझे के रूप में दोनों और अधिक जटिल की तुलना में यह करने की जरूरत है, और अभी तक परिपक्व नहीं है, लेकिन Linq करने वाली एसक्यूएल जाहिरा तौर पर मृत है, इसलिए हमलों के साथ इकाई की रूपरेखा का उपयोग कर रहा मैं उस तकनीक का भी उपयोग कर सकता हूं जो एमएस पर ध्यान केंद्रित कर रहा है।
यह एक साधारण एप्लीकेशन है, इसलिए मैंने इसके आसपास एक अलग डेटा परत बनाने के लिए (अभी तक) फिट नहीं देखा है। मैं डेटा पर प्राप्त करना चाहते हैं, मैं काफी सरल Linq करने वाली इकाई प्रश्नों का उपयोग, आम तौर पर सीधे मेरी कोड-पीछे, जैसे से:
var families = from family in entities.Family.Include("Person") orderby family.PrimaryLastName, family.Tag select family;
Linq करने वाली इकाई प्रश्नों एक IOrderedQueryable परिणाम लौटने के लिए, जो नहीं करता है अंतर्निहित डेटा में स्वचालित रूप से परिवर्तनों को प्रतिबिंबित नहीं करते हैं, उदाहरण के लिए, यदि मैं इकाई डेटा मॉडल में कोड के माध्यम से एक नया रिकॉर्ड जोड़ता हूं, तो इस नए रिकॉर्ड का अस्तित्व लिंक क्वेरी के संदर्भ में विभिन्न नियंत्रणों में स्वचालित रूप से दिखाई नहीं देता है। नतीजतन, मैं अंतर्निहित डेटा परिवर्तन पर कब्जा करने के एक ObservableCollection में इन प्रश्नों के परिणामों फेंक रहा हूँ,:
familyOC = new ObservableCollection<Family>(families.ToList());
मैं तो, एक CollectionViewSource को ObservableCollection नक्शा ताकि मैं छानने प्राप्त कर सकते हैं, सॉर्टिंग आदि, डेटाबेस में वापस आने के बिना। जब मैं रिकार्ड/वस्तुओं को जोड़ने या हटाने की जरूरत है
<ListBox DockPanel.Dock="Bottom" Margin="5,5,5,5" Name="familyList" ItemsSource="{Binding Source={StaticResource familyCVS}, Path=., Mode=TwoWay}" IsSynchronizedWithCurrentItem="True" ItemTemplate="{StaticResource familyTemplate}" SelectionChanged="familyList_SelectionChanged" />
, मैं मैन्युअल रूप से दोनों इकाई डेटा से ऐसा कर:
familyCVS.Source = familyOC; familyCVS.View.Filter = new Predicate<object>(ApplyFamilyFilter); familyCVS.View.SortDescriptions.Add(new System.ComponentModel.SortDescription("PrimaryLastName", System.ComponentModel.ListSortDirection.Ascending)); familyCVS.View.SortDescriptions.Add(new System.ComponentModel.SortDescription("Tag", System.ComponentModel.ListSortDirection.Ascending));
मैं तो उस CollectionViewSource के लिए विभिन्न नियंत्रण और क्या-नहीं बाँध मॉडल, और ObservableCollection:
private void DeletePerson(Person person) { entities.DeleteObject(person); entities.SaveChanges(); personOC.Remove(person); }
मैं आम तौर पर उपयोग कर रहा हूँ StackPanel और DockPanel तत्वों स्थिति नियंत्रित करता है। कभी-कभी मैं ग्रिड का उपयोग करूंगा, लेकिन यह बनाए रखना मुश्किल लगता है: यदि आप अपने ग्रिड के शीर्ष पर एक नई पंक्ति जोड़ना चाहते हैं, तो आपको ग्रिड द्वारा होस्ट की गई हर नियंत्रण को सीधे एक नई लाइन का उपयोग करने के लिए स्पर्श करना होगा। Uggh।
मैं लगभग जोड़ने, संशोधित करने या स्थिति नियंत्रण के लिए वी.एस. WPF डिजाइनर का उपयोग कभी नहीं (माइक्रोसॉफ्ट वास्तव में कभी नहीं सूखी अवधारणा प्राप्त करने के लिए लग रहा था हो गया है।)। वीएस के साथ आने वाला डब्ल्यूपीएफ डिजाइनर यह देखने के लिए बेहद उपयोगी है कि आपका फॉर्म कैसा दिख रहा है, लेकिन फिर भी, वास्तव में, वास्तव में नहीं, खासकर यदि आप डेटा टेम्पलेट्स का उपयोग कर रहे हैं जो उपलब्ध डेटा पर बाध्यकारी नहीं हैं डिजाइन समय अगर मुझे अपने एक्सएएमएल को संपादित करने की ज़रूरत है, तो मैं इसे एक आदमी की तरह लेता हूं और इसे मैन्युअल रूप से करता हूं।
मेरा अधिकांश वास्तविक कोड XAML की बजाय सी # में है। मैं तथ्य यह है कि मैं अभी तक के लिए उस में "सोच" का इस्तेमाल किया नहीं कर रहा हूँ से elsewhere उल्लेख किया है, पूरी तरह से अलग, XAML मुझे एक भद्दा, बदसूरत भाषा है, वह भी गरीब डिजाइनर और IntelliSense समर्थन के साथ आने के लिए होता है के रूप में हमलों, और कहा कि डीबग नहीं किया जा सकता है। Uggh। नतीजतन, जब भी मैं स्पष्ट रूप से देख सकता हूं कि सी # कोड में कुछ कैसे करना है, इसके पीछे मैं आसानी से नहीं देख सकता कि एक्सएएमएल में कैसे करना है, मैं इसे सी # में करता हूं, माफ़ी नहीं।WPF पृष्ठ (कहें, ईवेंट-हैंडलिंग के लिए) में कोड-बैक का उपयोग करने के लिए यह एक अच्छा अभ्यास नहीं है, लेकिन अब तक कम से कम, यह मुझे कोई समझ नहीं आता है। मुझे ईश्वरीय भयानक वाक्यविन्यास, एक आश्चर्यजनक रूप से खराब संपादक, और वस्तुतः कोई प्रकार की सुरक्षा के साथ बदसूरत, गुंजाइश भाषा में कुछ क्यों करना चाहिए, जब मैं एक अच्छी, साफ भाषा का उपयोग कर सकता हूं जैसे सी # जिसमें एक विश्व स्तरीय संपादक है, जो कि बिल्कुल सही है Intellisense, और अद्वितीय प्रकार की सुरक्षा?
तो मैं वहीं हूं जहां मैं हूं। कोई सुझाव? क्या मुझे इसका कोई बड़ा हिस्सा याद आ रहा है? कुछ भी जो मुझे वास्तव में अलग-अलग करने के बारे में सोचना चाहिए?
बनाम 2010/fw4.0: ऐसा लगता है कि आइटमसोर्स परिवार के लिए बाध्य होना चाहिए CVS.View (परिवार सीवीएस के बजाय) –