C #, WPF Bindingarray для ListBox не будет работать - PullRequest
0 голосов
/ 02 июля 2019

Я не могу заставить работать привязку массива к ListBox.

Я посмотрел в Интернете и попробовал много способов, ни один из которых не был успешным.Похоже, что данные отображаются в ItemsSource, но не отображаются в списке.

Код:

public partial class MainWindow : ThemedWindow
{
    public string selectedItem { get; set; }
    public ObservableCollection<string> MyFiles { get; set; }
    public MainWindow()
    {   
        InitializeComponent();
        DataContext = this;
    }

    private void Button_Click(object sender,RoutedEventArgs e)
    {

        string[] filePaths = Directory.GetFiles(TextEdit.Text);
        MyFiles = new ObservableCollection<string>(filePaths);
        selectedItem = MyFiles[0];
        foreach (string filePath in filePaths)
        {
            Console.WriteLine(filePath);
            string file = Path.GetFileName(filePath);
            Console.WriteLine(file);
        }
    }
}  

XAML:

<ListBox x:Name="listBox"
            BorderThickness="2"
            Height="352"
            HorizontalAlignment="Center"
            ItemsSource="{Binding MyFiles}"
            Margin="92,0,95.6,10"
            SelectedItem="{Binding selectedItem, Mode=TwoWay}"
            SelectionMode="Single" 
            VerticalAlignment="Bottom"
            Width="606"
            />

Нет сообщений об ошибках простоне показывать вывод в ListBox

Ответы [ 2 ]

2 голосов
/ 02 июля 2019

Ваша проблема в том, что привязка выполняется до того, как вы создадите экземпляр.

Попробуйте это при объявлении:

public ObservableCollection<string> MyFiles { get; } = new ObservableCollection<string>();

И заменить:

MyFiles = new ObservableCollection<string>(filePaths);

С:

foreach(var file in filePaths)
    MyFiles.Add(file);
0 голосов
/ 02 июля 2019

Поскольку вы устанавливаете коллекцию после установки контекста данных, вы должны сделать свойство MyFiles уведомляемым с помощью интерфейса INotifyPropertyChanged.

Или создать его только один раз в конструкторе, а затем,Вы просто добавляете или удаляете предметы.Установка свойства с новым экземпляром коллекции нарушает привязку.

...