मैं वर्तमान में एक सूची बॉक्स से दूसरे में डेटा स्थानांतरित कर रहा हूं। डब्ल्यूपीएफ के साथ मेरे पास है:

            <Grid>
                <ListBox Margin="10,29,194,301" Name="LeftListBox"/>
                <ListBox Margin="0,29,16,301" Name="RightListBox" HorizontalAlignment="Right" Width="173" />
                <Button Name="AddButton" Height="23" Margin="34,135,227,0" VerticalAlignment="Top"
                Click="AddButton_Click">Add &gt;&gt;</Button>
                <Button Name="RemoveButton" Margin="227,135,34,264" 
                Click="RemoveButton_Click">&lt;&lt; Remove</Button>
            </Grid>

मेरे सी # कोड के लिए, मैंने दो विधियां बनाई हैं जो बाएं बॉक्स के तत्वों को स्ट्रिंग्स और दाएं की सरणी का उपयोग करके लोड करती हैं। अब मेरी समस्या यह है कि मैं चाहता हूं कि बाएं बॉक्स का एक तत्व दाएं बॉक्स की सूची के अंतिम तत्व के बाद दाएं बॉक्स में रखा जाए। तो जब मैं ऐड पर क्लिक करता हूं, तो उसे इस विधि को निष्पादित करना चाहिए:

    private void AddButton_Click(object sender, RoutedEventArgs e)
    {
        // Find the right item and it's value and index
        currentItemText = LeftListBox.SelectedValue.ToString();
        currentItemIndex = LeftListBox.SelectedIndex;

        ObservableCollection<string> oList;
        oList = new System.Collections.ObjectModel.ObservableCollection<string>(toRemoveList);
        RightListBox.DataContext = oList;

        Binding binding = new Binding();
        RightListBox.SetBinding(ListBox.ItemsSourceProperty, binding);

        (RightListBox.ItemsSource as ObservableCollection<string>).Add(currentItemText);
        if (toAddList != null)
        {
            toAddList.RemoveAt(currentItemIndex);
        }

        // Refresh data binding
                   ApplyDataBinding();
    }

लेकिन समस्या यह है कि जब मैं बाएं बॉक्स से कोई आइटम चुनता हूं, तो ऐड पर क्लिक करता हूं, यह नया आइटम दाएं बॉक्स में जोड़ता है लेकिन जब मैं दूसरा आइटम जोड़ता हूं, तो यह पिछले एक आइटम को बदल देता है जिसे मैंने पहले चरण में जोड़ा था .

उसके बाद, दूसरी समस्या यह है कि RemoveButton_Click को कैसे लागू किया जाएगा? क्या यह पिछली विधि की तरह ही है?

0
LiquidSnake 16 अक्टूबर 2018, 13:49

1 उत्तर

सबसे बढ़िया उत्तर

इसके लिए आपको इतना कोड करने की जरूरत नहीं है। अधिक मजबूत और रखरखाव योग्य दृष्टिकोण के लिए नीचे दिए गए चरणों का पालन करें।

  1. बाएं और दाएं ListBox के अनुरूप दो Observablecollection बनाएं
  2. Observablecollection को ListBox से बांधें
  3. Add बटन पर क्लिक करें, item को बाएं सूची बॉक्स को असाइन किए गए अवलोकन संग्रह से हटा दें और दाएं ग्रिड से बंधे अवलोकन योग्य संग्रह में जोड़ें।

आपको बाइंडिंग को स्पष्ट रूप से अपडेट करने की आवश्यकता नहीं है। अवलोकनीय संग्रह स्वचालित रूप से संग्रह परिवर्तनों को सूचित करता है।

कोड में -

public ObservableCollection<ApplicationFormats> Formats { get; set; }

एक्सएएमएल -

<ListBox Name="LeftListBox" ItemsSource="{Binding Formats}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Name}"/>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
0
Sham 16 अक्टूबर 2018, 12:18