2011-05-05 24 views
5

मेरे पास यह एक्सएएमएल है:जब सूची ListView में आइटम जोड़ा जाता है तो ईवेंट निकाल दिया जाता है?

<ListView Name="NameListView" 
      HorizontalAlignment="Stretch" 
      VerticalAlignment="Stretch" 
      Grid.Column="1"> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn> 
       <GridViewColumn.DisplayMemberBinding> 
        <MultiBinding StringFormat="{}{0} {1}"> 
         <Binding Path="First" /> 
         <Binding Path="Last" /> 
        </MultiBinding> 
       </GridViewColumn.DisplayMemberBinding> 
      </GridViewColumn> 
     </GridView> 
    </ListView.View> 
</ListView> 

और एक ObservableCollection<Name> जिसे "नाम" कहा जाता है, मेरे कोड-पीछे में ListView से जुड़ा हुआ है। जब संग्रह में एक नया नया नाम जोड़ा जाता है, तो मैं सूची दृश्य को उस नए जोड़े गए नाम के पृष्ठभूमि रंग को बदलना चाहता हूं। मैं इसे करने के बारे में कैसे जा सकता हूं?

+3

स्टैक ओवरव्लो में आपका स्वागत है! मैंने आपके लिए प्रश्न में कोड स्वरूपण तय कर दिया है। कृपया आसान पढ़ने के लिए एक पल लें ** प्रश्न पूछने के दाहिने ओर ** बॉक्स को कैसे प्रारूपित करें, और [पेज से जुड़े] (http://stackoverflow.com/editing-help) ** से [ ?] ** प्रश्न क्षेत्र से ऊपर। (एक प्रश्न बॉक्स पूछें के तहत दिखाया गया एक पूर्वावलोकन बॉक्स भी है जहां आप अपने प्रश्न का पूर्वावलोकन कर सकते हैं।) –

उत्तर

15

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

((INotifyCollectionChanged)MainListBox.Items).CollectionChanged += ListBox_CollectionChanged; 

और फिर उस घटना के अंदर आप इस तरह कोड के साथ अपने मद से प्राप्त कर सकते हैं:

private void ListBox_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) 
    { 
     if (e.NewItems.Count > 0) 
     { 
      Dispatcher.BeginInvoke(() => 
      { 
       var newListItem = MainListBox.ItemContainerGenerator.ContainerFromItem(e.NewItems[0]) as Control; 
       if (newListItem != null) 
       { 
        newListItem.Background = System.Windows.Media.Brushes.Red; 
       } 
      }, DispatcherPriority.SystemIdle); 
     } 
    } 
+1

1. यह एक सूची बॉक्स नहीं है लेकिन एक सूची दृश्य 2. यह पृष्ठभूमि अग्रभूमि नहीं है 3. मैं इस तरह की घटना को कहीं भी नहीं देख सकता नियंत्रण। –

+0

इसे और अधिक स्पष्ट करने के लिए उपरोक्त मेरे कोड को संशोधित किया गया। इसके अलावा यह किसी भी आइटम नियंत्रण (ListBox या ListView) के साथ काम करना चाहिए। –

+1

मुझे पूरा यकीन है कि यह काम नहीं करेगा। ListItem को कास्टिंग करने वाली एक चीज़ के लिए कभी भी काम नहीं किया जा रहा है क्योंकि ListItem एक दस्तावेज़ नियंत्रण है जिसमें सूचीबॉक्स या ListView के साथ कुछ भी नहीं है। –

1

सीधे एक ListViewItem की पृष्ठभूमि की स्थापना एक अच्छा नहीं है विचार क्योंकि डिफ़ॉल्ट रूप से एक सूची दृश्य वर्चुअलाइजिंग (जो अच्छा है) है, इसका मतलब यह है कि आइटम को बनाने वाले नियंत्रणों को स्क्रॉल किए जाने पर डिस्पोजेक्ट किया जाता है। ऐसा करने का सबसे आसान तरीका यह है कि मैं सोच सकता हूं कि आपके डेटा-ऑब्जेक्ट में एक संपत्ति है जो न्यू-स्टेट इंगित करती है, फिर आप इसे ट्रिगर कर सकते हैं।

<ListView.ItemContainerStyle> 
    <Style TargetType="{x:Type ListViewItem}"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding IsNew}" Value="True"> 
       <Setter Property="Background" Value="Yellow"/> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</ListView.ItemContainerStyle> 

इसके बाद आप किसी भी तर्क आप फिर से गलत पर कि मूल्य निर्धारित करना चाहते हैं का उपयोग कर सकते है अगर आप अब यह नया विचार नहीं करते।

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

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