• 0

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

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

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

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

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

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

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 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);
    }
}

 

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن