Привязка ListBox перечислить (набор) в XAML

Я изучаю WPF, таким образом, я - вид n00b в этом. Я видел некоторые примеры о том, как сделать то, что я хочу сделать, но ничто точно...

Вопрос: Я хочу связать Список с ListBox. Я хочу сделать это в XAML, w/o кодирующий в коде позади. Как я могу достигнуть этого?

Прямо сейчас я делаю это тот путь:

XAML

<ListBox x:Name="FileList">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Label Content="{Binding Path=.}"/>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Код позади

public MainWindow()
{
    // ...
    files = new List<string>();
    FileList.ItemsSource = files;
}

private void FolderBrowser_TextChanged(object sender, RoutedEventArgs e)
{
    string folder = FolderBrowser.Text;
    files.Clear();
    files.AddRange(Directory.GetFiles(folder, "*.txt", SearchOption.AllDirectories));
    FileList.Items.Refresh();
}

Но я хочу избавиться от FileList.ItemsSource = files; и FileList.Items.Refresh(); в коде C#.

Спасибо

7
задан Trisped 28 May 2014 в 21:03
поделиться

2 ответа

Сначала настройте привязку в своем списке:

<ListBox x:Name="FileList" ItemsSource="{Binding Files}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Label Content="{Binding Path=.}"/>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

или

<ListBox x:Name="FileList" ItemsSource="{Binding Files}" DisplayMemberPath="."/>

Затем убедитесь, что «Файлы» являются свойством в вашем DataContext (или коде позади). (Вы не можете привязываться к полям, только к свойствам ...)

В идеале вы захотите сделать Files ObservableCollection вместо List , также. Это позволит привязке правильно обрабатывать добавление или удаление элементов.

Если вы сделаете эти две вещи, все должно работать правильно.

19
ответ дан 6 December 2019 в 09:18
поделиться

Два приема, которые нужно добавить к ответу Рида:

1) Если все, что вы показываете в элементах окна списка, является строкой, вы можете избежать Папка ListBox.ItemTemplate , просто установив ListBox.DisplayMemberPath .

2) Вы можете установить для окна DataContext самого себя. Например, дайте окну имя MyWindow и установите для его DataContext значение {Binding ElementName = MyWindow} . Теперь вы можете выполнить привязку к любому из его общедоступных свойств. (Я почти уверен, что именно от Рида я научился этому трюку.)

1
ответ дан 6 December 2019 в 09:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: