2011-01-19 7 views
12

अगर मैं कोड-बैक में एक combobox की तरह कुछ बांधना चाहता हूं तो मुझे कोई समस्या नहीं है। कुछ ऐसा:क्या xaml में एक स्थिर संसाधन सूची <string> बनाना संभव है?

List<string> strings = new List<string>(); 
AddStringsFromDataSourceToList(strings); 

comboBox1.ItemSource = strings; 

जहां तक ​​मैं कह सकता हूं, XAML में ऐसा करने के लिए कोई त्वरित और गंदा तरीका नहीं है। सभी प्रशंसा के लिए wpf अपने सुपर सरल डाटाबेसिंग के लिए प्राप्त कर रहा है, कुछ ऐसा सरल लगता है जो सी # में करना आसान है। क्या निर्भरताप्रॉपर्टी रैपर बनाने और उन्हें इंटेलिजेंस से बहुत मदद के बिना संसाधनों के रूप में जोड़ने के लिए ऐसा करने का कोई आसान तरीका है या जो ऑब्जर्जेबल कोलेक्शन में जाता है? मैं समझता हूं कि यह असंभव नहीं है, लेकिन अगर मुझे इतना आसान काम गहराई में लगता है तो मुझे कुछ याद आना चाहिए ...

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

+1

डब्ल्यूपीएफ इस तथ्य के लिए अपनी प्रशंसा प्राप्त करता है कि यह तर्क से डिजाइन को दूर से विभाजित करने की अनुमति देता है और ऐसा नहीं - क्योंकि यह सबकुछ और कुछ भी कर सकता है। –

+0

@ निराशा- यह कुछ भी पागल नहीं है ... निश्चित रूप से "कुछ और सब कुछ नहीं"। एप्स बनाने में सबसे आम कार्यों में से एक के बारे में इसकी सरलता और समस्या का मुद्दा। –

+0

मुझे पता है कि यह पागल नहीं है; लेकिन एक बार जब आप संतुष्ट हो जाते हैं और 'मैं इस यूआई में डेटा के इस टुकड़े को एम्बेड कर दूंगा ...' कौन जानता है कि यह कहां खत्म होगा? और यदि हम "डेटा" के बारे में बात कर रहे हैं जो अनिवार्य रूप से यूआई का हिस्सा समझा जा सकता है, जैसे कि ड्रॉप-डाउन विकल्पों की एक सूची जो आम और स्थिर हैं, तो आमतौर पर यह कंटेनर का उपयोग होता है जिसे सारणित और पुन: उपयोग किया जाता है। मैं आप पर, प्रश्न, या विधि नहीं मिल रहा हूं, बस कुछ चीजें बता रहा हूं, बीटीडब्ल्यू। –

उत्तर

3

ज़रूर होती है समझ में आ डेटा। निराशा में अपने हाथ फेंक न दें क्योंकि पहली चीज जो आपने कोशिश की थी वह आसान नहीं था - मेरी राय में, डब्ल्यूपीएफ सीखने की अवस्था के लायक है।

WPF प्रशंसा हो जाता है, क्योंकि यह व्यवहार से दृश्यों विंडोज़ रूपों की तुलना में बहुत आसान अलग बनाता है, और क्योंकि यह अच्छा दृश्य प्रभाव बनाने बनाता ज्यादा बहुत आसान, नहीं है क्योंकि यह यह आसान तुच्छ उदाहरण करने के लिए बनाता है। हालांकि, इस मामले में - यह छोटा उदाहरण करने के लिए आसान है।

आपके संपादन के साथ आप उन्हें कहां से खींचना चाहते हैं? आपको किसी भी माध्यम से निर्भरता गुण या देखने योग्य संग्रह बनाने की आवश्यकता नहीं है। एक साधारण सूची संपत्ति होगी (मैं उस मामले में xaml में संग्रहदृश्य स्रोत का उपयोग करना पसंद करता हूं)।साथ ही, यह न भूलें कि को की आवश्यकता नहीं है, यदि आप इसे नफरत करते हैं तो सभी एक्सएएमएल का उपयोग करें। लेकिन यदि आप इसके बावजूद डब्ल्यूपीएफ के लिए डिज़ाइन करते हैं तो आपको बहुत सारे कार्य मिलेंगे (इस तरह) एक आसान।

+0

क्षमा करें, मैं स्पष्ट नहीं था, लेकिन मैं गतिशील सामग्री जोड़ने का एक तरीका ढूंढ रहा हूं (उदाहरण के लिए सूची से जहां मूल्य ज्ञात नहीं हैं)। –

+2

@ प्रोफ प्लम मुझे लगता है कि मुझे समझ में नहीं आता है - आप चाहते हैं कि xaml किसी स्थिर कोड को पीछे न रखें, लेकिन आप मानों को गतिशील बनाना चाहते हैं? मूल्य कब निर्धारित किए जाएंगे? –

+0

धन्यवाद, संग्रहविज्ञान विधि में क्या शामिल है? यदि आप किसी भी लिंक के बारे में जानते हैं जो एमएसडीएन के अलावा संक्षिप्त उपयोग का प्रदर्शन करता है जो काफी उपयोगी होगा। –

1

आप कर सकते हैं:

<ComboBox> 
     <ComboBoxItem>one</ComboBoxItem> 
     <ComboBoxItem>two</ComboBoxItem> 
    </ComboBox> 

और वहाँ भी उदाहरण के लिए एक संसाधन अनुभाग में घोषित करने के लिए (और परोक्ष बनाने) डेटा के लिए वाक्य रचना मौजूद है।

हो सकता है कि आप एक अधिक पूरा परिदृश्य का कहना है सकते हैं, आवश्यकताओं और बाधाओं के साथ?

+0

यह दिखाने के लिए संपादित किया गया कि मैं वास्तव में क्या प्राप्त कर रहा था: जब सूची आइटम अज्ञात हैं। –

+1

अब आप अनिवार्य सी # को घोषणात्मक एक्सएएमएल में मिश्रण करना चाहते हैं। यदि आप फ़ंक्शन को उस संपत्ति में बदल देते हैं जो आप कर चुके हैं। –

5

आप कुछ इस तरह की तलाश कर रहे हैं:

<ComboBox> 
    <ComboBox.ItemsSource> 
     <x:Array Type="sys:String" 
      xmlns:sys="clr-namespace:System;assembly=mscorlib"> 
      <sys:String>One</sys:String> 
      <sys:String>Two</sys:String> 
     </x:Array> 
    </ComboBox.ItemsSource>     
</ComboBox> 

आप केवल एक सूची के लिए कुछ आइटम को परिभाषित हेंक Holterman से समाधान को देखने के लिए चाहते हैं। वैसे, आप एक संसाधन के रूप में और अन्य प्रकार के लिए भी सरणी घोषित कर सकते हैं।

अद्यतन

ऐसा लगता है कि आप अपने प्रश्न बदल दिया है। हालांकि अब मुझे समझ में नहीं आता कि आपकी इच्छा क्या है। आप एक संग्रह है कि आप अपने में है बाध्य करने के लिए चाहते हैं, तो कोड-पीछे, तो एक सार्वजनिक संपत्ति है कि इस संग्रह लौटाता हो, उद्देश्य यह है कि इस संपत्ति को उजागर करता है के DataContext सेट और XAML में एक बाध्यकारी परिभाषित:

<ComboBox ItemsSource="{Binding NameOfYourCollectionProperty}"... 

आशा संसाधनों या इनलाइन itemssources, या समूहीकृत डेटा का उपयोग कर .. भी एक्सएमएल -

<ComboBox> 
    <ComboBoxItem>One</ComboBoxItem> 
    <ComboBoxItem>Two</ComboBoxItem> 
</ComboBox> 

है कि लगभग रूप में सरल कर रहे हैं अपने लक्ष्य के आधार पर अन्य वाक्यविन्यास रहे हैं: मैं आपके सवाल का सही ...

33
<Window.Resources> 
    <x:Array x:Key="strings" Type="sys:String" 
      xmlns:sys="clr-namespace:System;assembly=mscorlib"> 
      <sys:String>One</sys:String> 
      <sys:String>Two</sys:String> 
    </x:Array> 
    <!-- likewise --> 
    <x:Array x:Key="persons" Type="{x:Type local:Person}" 
      xmlns:local="clr-namespace:namespace-where-person-is-defined"> 
      <local:Person FirstName="Sarfaraz" LastName="Nawaz"/> 
      <local:Person FirstName="Prof" LastName="Plum"/> 
    </x:Array> 
<Window.Resources> 


<ComboBox ItemsSource="{StaticResource strings}" /> 

<ListBox ItemsSource="{StaticResource persons}"> 
    <ListBox.ItemTemplate> 
      <DataTemplate> 
       <TextBlock> 
        <Run Text="{Binding FirstName}"/> 
        <Run Text=" "/> 
        <Run Text="{Binding LastName}"/> 
       </TextBlock> 
      </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 
+0

मैं विंडो स्तर पर परिभाषित xmlns को पसंद करना चाहता हूं उदा। '<विंडो ... xmlns: sys =" clr-namespace ... "xmlns: स्थानीय =" clr-namespace: ... "> 'सरणी संसाधनों के बजाय। यह बहुत साफ ठोस मानक एक्सएएमएल है। – cod3monk3y

+0

बस एक सिर ऊपर, अपने xaml में आपको मिल गया है, लेकिन यह होना चाहिए। मैं संपादित नहीं कर सकता क्योंकि यह 6 वर्णों से कम है। – edhedges

+0

@edhedges: फिक्स्ड। धन्यवाद। – Nawaz

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