[英]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.