اذهب إلى المحتوى
  • 0

كيف أملأ قائمة منسدلة انطلاقا من ملف نصي على #C؟

سعاد

السؤال

على تطبيق بلغة #C، بتقنية WPF، أودّ ملأ أداة Combobox بقيم مُستخرجة من ملف نصي.

حاولت فعل ذلك باستعمال الكود :

<ComboBox x:Name="serverTxt" Height="23"  VerticalAlignment="Top" Text="{Binding Path=ServerNames}"/>

حيث مررت مسار الملف النصي إلى القائمة المُنسدلة، على أساس أنها ستقوم بإدراج قيمه كقيم لها.

الكود لا يعمل، فهل من حل لذلك؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

السيناريو المتوقع في مثل هذه الوظائف، هو تصفح الملف النصي عن طريق دالة التكرار forEach ثم إضافة العناصر إلى القائمة المنسدلة انطلاقا من الملف النصي.

هذا المثال التطبيقي، يتيح لك عمل ذلك، حيث يتم التأكد من وجود الملف النصي قبل الشروع في تصفحه:

الكود المختص بـ Combobox:

<ComboBox x:Name="comboBox" HorizontalAlignment="Left" Margin="149,43,0,0" VerticalAlignment="Top" Width="120" IsEditable="True"
          ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}" Text="{Binding NewItem, UpdateSourceTrigger=LostFocus}"/>
<ComboBox x:Name="comboBox1" HorizontalAlignment="Left" Margin="349,122,0,0" VerticalAlignment="Top" Width="120"/>

الدالة المسؤولة عن إضافة القيم من الملف النصي:

public partial class MainWindow : Window
{
    private string _selectedItem;

    private ObservableCollection<string> ServerNames;
    private string fileLocation = @"C:\Temp\ServerNames.txt";

    public MainWindow()
    {
       ServerNames = new ObservableCollection<string>();

        if (File.Exists(fileLocation))
        {
            var list = File.ReadAllLines(fileLocation).ToList();
            list.ForEach(ServerNames.Add);
        }
        DataContext = this;
        InitializeComponent();
    }

    public IEnumerable Items => ServerNames;

    public string SelectedItem
    {
        get { return _selectedItem; }
        set
        {
            _selectedItem = value;
            OnPropertyChanged("SelectedItem");
        }
    }

    public string NewItem
    {
        set
        {
            if (SelectedItem != null)
            {
                return;
            }
            if (!string.IsNullOrEmpty(value))
            {
                ServerNames.Add(value);
                SelectedItem = value;
            }
        }
    }

    protected void OnPropertyChanged(string propertyName)
    {
        var handler = this.PropertyChanged;
        handler?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private void Window_Closing(object sender, CancelEventArgs e)
    {
        if (!File.Exists(fileLocation))
        {
            File.Create(fileLocation);
        }

        File.WriteAllLines(fileLocation, ServerNames);
    }
}

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...