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

السؤال

نشر

على تطبيق بلغة #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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...