簡體   English   中英

在XAML中將ListBox綁定到列表(集合)

[英]Binding ListBox to List (Collection) in XAML

我正在學習WPF,所以我有點n00b。 我看到了一些有關如何做自己想做的事的例子,但完全沒有...

問題:我想將List綁定到ListBox。 我想在XAML中執行此操作,而無需在后面的代碼中進行編碼。 我該如何實現?

現在我這樣做

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#代碼中。

謝謝

首先,在列表框中設置綁定:

<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<T>而不是List<T> 這將使綁定正確處理添加或刪除元素。

如果您做這兩件事,它應該可以正常工作。

里德的答案有兩個技巧:

1)如果您在列表框中顯示的所有內容都是字符串,則只需設置ListBox.DisplayMemberPath即可避免使用ListBox.ItemTemplate folderol。

2)您可以將窗口的DataContext設置為其自身。 例如,給窗口命名為MyWindow並將其DataContext設置為{Binding ElementName=MyWindow} 現在,您可以綁定到其任何公共屬性。 (我很確定里德首先是從中學到這個技巧的。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM