2009-03-02 15 views
24

मैं निम्नलिखित (बहुत सरल) ItemsControl है:डब्ल्यूपीएफ - आइटम नियंत्रण - मैं आइटम टेम्पलेट में "चेकबॉक्स" आइटम कैसे ढूंढूं?

foreach (var dahCurrentItem in BlahList.Items) 
{ 
    var ItemCheckBox = BlahList.GimmeMyControl(dahCurrentItem, "MyCheckBox") 

    // I'm going to do something with the check box here... 
} 

मैं इसे कैसे करते हैं:

<ItemsControl Name="BlahList" ItemsSource="{Binding Blah}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <CheckBox Name="MyCheckBox" Content="{Binding Text}" /> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

कोड में, मैं निम्न कार्य करना चाहते हैं?

उत्तर

17

सबसे पहले, अगर ऐसा कोई तरीका नहीं है तो आप इससे बच सकते हैं। CheckBox के विभिन्न गुणों को मैन्युअल रूप से बाहर खींचने की कोशिश करने के बजाय अपने दृश्य मॉडल में बाध्य करने के लिए यह बहुत साफ है।

कहा यही कारण है, अगर आप अपने CheckBox को पाने के लिए की जरूरत है, आप इस तरह कोड का उपयोग करने में सक्षम होना चाहिए कर सकते हैं:

var container = _itemsControl.ItemContainerGenerator.ContainerFromItem(dahCurrentItem) as FrameworkElement; 
var checkBox = container.FindName("MyCheckBox") as CheckBox; 
+0

आप महोदय, सुंदर हैं! - मैं आपके कथन से सहमत हूं, लेकिन इस मामले में मैं "सभी जांचें" और "कोई भी जांचें" प्रकार का फ़ंक्शन नहीं कर रहा हूं ... मुझे एहसास है कि मेरे पास कुछ सरणी के लिए "ischecked" बाध्य हो सकता है, और फिर बाइंडिंग को फिर से अपडेट करें ... लेकिन सिर्फ foreaching और जांच आलसी है ... मेरा मतलब है .. आसान :) धन्यवाद फिर से! –

+2

ठीक है, मुझे "उत्तर दिया गया" चेक बॉक्स लेना पड़ा ... क्योंकि मुझे केवल "पूर्ण" मिल रहा है। मुझे लगता है कि यह वास्तव में करीब है, लेकिन कुछ छोटी याद आ रही है। –

+0

'FindName' करते समय शून्य न होने के लिए अंत में क्या किया जाना चाहिए? – J4N

27

ठीक है, केंट श्रेय दिया जाता है, लेकिन यह केवल ज्यादातर सही था:)

// This part was good: 
var container = _itemsControl.ItemContainerGenerator.ContainerFromItem(dahCurrentItem) as FrameworkElement; 

लेकिन ... दूसरे भाग अशक्त वापसी होगी, तो यह होना ही था इस प्रकार है:

var checkBox = _itemsControl.ItemTemplate.FindName("MyCheckBox", container) as CheckBox; 

उसका कोड ऐसा लगता था कि यह काम करना चाहिए था, लेकिन मेरे मामले के लिए, मुझे इसके बजाय ऐसा करना पड़ा।

+1

मेरे पास ItemTemplate पर 'FindName' विधि नहीं है (कहीं भी एक अतिरिक्त ') लगता है? – J4N

0

यहाँ एक कंटेनर है कि आपके ItemsControl के मद घरों पर कब्जा करने का एक उदाहरण है:

 CheckBox checkbox = sender as CheckBox; 

     foreach (var item in MembersItemsControl.Items) 
     { 
      var container = 
MembersItemsControl.ItemContainerGenerator.ContainerFromItem(item) as FrameworkElement; 

      UserInformation user = container.DataContext as UserInformation; 

      bool isMale = true; 
      if (user.sex == isMale && checkbox.IsChecked.Value == true) 
      { 
       container.Visibility = System.Windows.Visibility.Visible; 
      } 
     } 

मुझे आशा है कि मदद करता है।

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