2010-11-15 11 views
5

अंदर बटन के साथ समस्याओं मैं मदों की एक सरल सूची के साथ एक लिस्टबॉक्स मिल गया है। मेरी XAML पृष्ठ पर, मैं निम्नलिखित हैSilverlight/विंडोज फोन 7 SelectedIndex लिस्टबॉक्स

<ListBox Name="listBox1"> 
         <ListBox.ItemTemplate> 
          <DataTemplate> 
            <TextBlock Text="{Binding firstName}"/> 
            <TextBlock Text="{Binding lastName}"/> 
            <Button BorderThickness="0" Click="buttonPerson_Click"> 
             <Image Source="delete-icon.png"/> 
            </Button> 
           </StackPanel> 
          </DataTemplate> 
         </ListBox.ItemTemplate> 
        </ListBox> 

मेरी codebehind में, मैं SelectedIndex हड़पने के लिए तो मैं संग्रह है कि मेरे लिस्टबॉक्स के लिए बाध्य है से आइटम निकाल सकते हैं की कोशिश करो।

private void buttonPerson_Click(object sender, RoutedEventArgs e) 
     { 

      // If selected index is -1 (no selection) do nothing 
      if (listBox1.SelectedIndex == -1) 
       return; 

      myPersonList.removeAt(listBox1.SelectedIndex); 

     } 

हालांकि, कोई फर्क नहीं पड़ता जो पंक्ति पर मैं हटाएँ बटन पर क्लिक, SelectedIndex हमेशा होता है -1

मैं क्या याद आ रही है?

अग्रिम धन्यवाद!

उत्तर

6

आप आप क्या चाहते हैं कर सकते हैं बटन के टैग संपत्ति इस तरह से अपनी वस्तु को सेट करके: eventhandler में फिर

<Button BorderThickness="0" Click="buttonPerson_Click" Tag="{Binding BindsDirectlyToSource=True}"> 
    <Image Source="delete-icon.png"/> 
</Button> 

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

private void buttonPerson_Click(object sender, RoutedEventArgs e) 
{ 
    myPersonList.remove((sender as Button).Tag); 
} 

क्या आपको अपनी व्यक्ति वस्तु कहा जाता है तो मैं यह करने के लिए टैग डाली नहीं था, लेकिन आप शायद उस करना होगा, लेकिन लगता है कि आप उस के साथ सहज हैं।


वहाँ एक लापता StackPanel अपने XAML में तत्व शुरू है? यह शायद सिर्फ एक निरीक्षण है, लेकिन यदि यह आपका वास्तविक कोड है तो आपको कुछ समस्याएं हो सकती हैं।

+0

यह उत्तर बहुत उपयोगी रहा है। क्या होगा यदि मैं टैग पर एक संपूर्ण ऑब्जेक्ट संलग्न नहीं करना चाहता हूं? क्या होगा यदि मैं सिर्फ एक नंबर संलग्न करना चाहता हूं .. चयनित इंडेक्स? – Dave

+1

मैं इंडेक्स का उपयोग करने से बचूंगा (दोनों क्योंकि यह करना कठिन है और आपके कोड में बदलाव के रूप में कम लचीला है)। आप अपनी कस्टम ऑब्जेक्ट में एक आईडी प्रॉपर्टी (कुछ अद्वितीय) जोड़ सकते हैं और टैग को बाध्य कर सकते हैं। फिर आप या तो सूची के माध्यम से लूप कर सकते हैं और इस आईडी के आधार पर हटा सकते हैं, या उस आईडी के कुंजी सेट के साथ एक शब्दकोश का उपयोग कर सकते हैं। – theChrisKent

1

बटन स्पर्श कैप्चर कर रहा है (क्लिक करें) घटना तो आइटम का चयन किया जा रहा है कभी नहीं किया गया है।

इसके बजाय SelectedIndex का उपयोग करने का

, आप जो आइटम आधारित है जिस पर बटन क्लिक किया गया था उन्हें हटाने का तरीका काम करना चाहिए। (sender ईवेंट हैंडलर के लिए पारित को देख कर ऐसा करें।)

2

इस बटन होगा पर क्लिक कर देने, अपने DataContext आइटम आप हटाना चाहते हैं और एक ठेठ List कार्यान्वयन एक Remove विधि होगा किया जाएगा । तो कुछ इस तरह सामान्य स्थिति में काम करेगा: -

((IList)myPersonList).Remove(((Button)sender).DataContext); 
1

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

private void buttonPerson_Click(object sender, RoutedEventArgs e) 
{ 

     // Select the item in the listbox that was clicked 
     listBox1.SelectedItem = ((Button)sender).DataContext; 

     // If selected index is -1 (no selection) do nothing 
     if (listBox1.SelectedItem == null) 
      return; 

     // Cast you bound list datatype. 
     myPersonList.remove(([myPersonList Type])listBox1.SelectedValue); 

    } 

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

  • कोई संबंधित समस्या नहीं^_^