【问题标题】:Binding ListBox to List (Collection) in XAML在 XAML 中将 ListBox 绑定到列表(集合)
【发布时间】:2011-02-10 07:52:25
【问题描述】:

我正在学习 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();
}

但我想在 C# 代码中去掉 FileList.ItemsSource = files;FileList.Items.Refresh();

谢谢

【问题讨论】:

标签: c# wpf xaml wpf-controls binding


【解决方案1】:

首先,在列表框中设置绑定:

<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(或隐藏的代码)中的一个属性。 (不能绑定字段,只能绑定属性...)

理想情况下,您也希望将文件设为ObservableCollection&lt;T&gt; 而不是List&lt;T&gt;。这将允许绑定正确处理添加或删除元素。

如果你做了这两件事,它应该可以正常工作。

【讨论】:

  • 谢谢。下一步 [对我来说] 将学习如何创建 ObservableLis&lt;T&gt; : INotifyCollectionChanged, INotifyPropertyChanged
  • 有没有办法删掉 部分?和喜欢去 `ItemsSource="{Binding Files.PROPERTY}">?
  • @Nerdintraining 如果您只是绑定一个字符串(或看起来正确的东西转换为字符串),您可以使用 DisplayMemberPath
【解决方案2】:

为 Reed 的回答添加两个技巧:

1) 如果您在列表框中显示的所有项目都是一个字符串,您可以通过设置 ListBox.DisplayMemberPath 来避免 ListBox.ItemTemplate 文件夹。

2) 您可以将窗口的DataContext 设置为自身。例如,将窗口命名为MyWindow,并将其DataContext 设置为{Binding ElementName=MyWindow}。现在您可以绑定到它的任何公共属性。 (我很确定我最初是从 Reed 那里学到这个技巧的。)

【讨论】:

  • 谢谢。这是一种有趣的方法,我一定会使用它。
猜你喜欢
  • 2011-12-03
  • 1970-01-01
  • 2014-05-03
  • 2015-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-13
  • 2015-09-01
相关资源
最近更新 更多