2011-07-12 7 views
6

मेरे पास wpf में डेटाग्रिड के लिए एक इकाई को बाध्य करने में एक साधारण समस्या है।नेस्टेड ऑब्जेक्ट्स (जैसे मास्टर विवरण) के साथ wpf डेटाग्रिड डाटाबेस

मेरे पास "उपयोगकर्ता" नामक एक इकाई है .... और प्रत्येक "उपयोगकर्ता" में एक "वर्कग्रुप" है .. दोनों के बीच संबंध एक से एक है।

अब ईएफ में प्रत्येक उपयोगकर्ता इकाई के अंदर एक कार्यसमूह इकाई है।

जब मैं datagrid के लिए बाध्य करने के लिए उपयोगकर्ता संग्रह चाहते हैं मैं कोई सुराग नहीं गर्म कहने के लिए आप एक datagrid स्तंभ के अंदर workgroup.Title forexample डाल करने के लिए है कि है

मैं इस तरह से बाध्य करने के लिए कोशिश कर रहा हूँ:

XAML:

<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Users}" HorizontalAlignment="Stretch" Margin="5" Name="dgUserList" VerticalAlignment="Stretch" SelectionChanged="dgUserList_SelectionChanged"> 
       <DataGrid.Columns> 
        <DataGridTextColumn Binding="{Binding FirstName}" Header="FirstName" /> 
        <DataGridTextColumn Binding="{Binding LastName}" Header="LastName" /> 
        <DataGridTextColumn Binding="{Binding Username}" Header="UserName" /> 
        <DataGridTextColumn Binding="{Binding WorkGroup}" Header="Workgroup" /> 
       </DataGrid.Columns> 
      </DataGrid> 

कोड के पीछे: निर्मित इस तरह एक संपत्ति:

public List<User> Users 
    { 
     get { return dal.GetUsers(); } 
    } 

और बाध्यकारी है:

private void BindGrid() 
    { 
     dgUserList.ItemsSource = Users; 
    } 

उपयोगकर्ता इकाई के प्रत्यक्ष गुणों के साथ इस काम फ़ाइल लेकिन यह datagrid स्तंभ के अंदर कार्यसमूह इकाई के प्रकार डालता है और कारण स्पष्ट है। मैं

के अंदर वर्कग्रुप का शीर्षक रखना चाहता हूं, मैं इसे कैसे प्राप्त कर सकता हूं?

किसी भी मदद बहुत सराहना

उत्तर

8

WPF बाइंडिंग समर्थन नेस्ट गुण तो एक बाध्य वस्तु बस सामान्य का उपयोग की एक संपत्ति पर उप-गुणों में से किसी को प्राप्त करने के लिए किया जाएगा। "" वाक्यविन्यास:

<DataGridTextColumn Binding="{Binding WorkGroup.Title}" Header="Workgroup" /> 

आपको आइटमसोर्स को दो बार सेट करने की आवश्यकता नहीं है। यदि आपके पास डेटाग्रिड का डेटा कॉन्टेक्स्ट विंडो (या UserControl, आदि) के रूप में स्थापित है, जिसके कोड-बैक ने उपयोगकर्ता संपत्ति घोषित की है तो XAML में आइटम्ससोर्स बाइंडिंग पर्याप्त है और आप BindGrid विधि को हटा सकते हैं। यदि आपने डेटाकॉन्टेक्स्ट सेट नहीं किया है, तो एक्सएएमएल आइटमसोर्स बाइंडिंग कुछ भी नहीं कर रही है (आप शायद अपने डीबग आउटपुट में एक त्रुटि संदेश देख सकते हैं) ताकि आप इसे हटा सकें और कोड-बैक विधि को इसकी देखभाल कर सकें।

आइटम को जोड़े या हटाए जाने पर आपको स्वत: अधिसूचना और यूआई अपडेट प्राप्त करने के लिए एक ऑब्जर्जेबल कोलेक्शन का उपयोग करने पर भी विचार करना चाहिए। चूंकि आप पहले से ही ईएफ का उपयोग कर रहे हैं, आप उपयोगकर्ता के लिए एंटिटी कोलेक्शन का उपयोग करने में भी सक्षम हो सकते हैं, जिसमें एक ही स्वचालित इनोटिफाइलेक्शन चेंज अधिसूचना शामिल है।

+0

धन्यवाद जॉन आप अच्छे हैं – Pouyan

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