在WPF中将集合绑定到ListBox

时间:2019-02-14 08:24:42

标签: c# wpf

我对WPF有基本问题,我尝试设置DataContext,绑定到集合,但仍然无法使它正常工作。我一直在寻找这样的基本问题的方法...我一定会错过一些非常简单的东西。感谢您的帮助:)

隐藏代码:

public ObservableCollection<Photo> MyPhotos = new ObservableCollection<Photo>();
public DataTemplate()
{
  InitializeComponent();
  listBox.DataContext = MyPhotos;
  MyPhotos.Add(new Photo(@"path to existing file"));
}

XAML

<Window.Resources>
  <DataTemplate DataType="{x:Type local:Photo}">
    <Border Margin="3">
      <Image Source="{Binding Source}"/>
    </Border>
  </DataTemplate>
</Window.Resources>
<Grid>
  <ListBox Name="listBox" ItemsSource="{Binding MyPhotos}" Background="Silver" Width="600" Margin="10" SelectedIndex="0"/>
</Grid>

照相课:

public class Photo
{
  public string Source { get; set; }
  public Photo(string path)
  {
    Source = path;
  }
}

2 个答案:

答案 0 :(得分:4)

您需要将DataTemplate作为ItemTemplate引用到您的ListBox中。在您的Key中定义DataTemplate

<Window.Resources>
      <DataTemplate x:Key="MyItemTemplate" DataType="{x:Type local:Photo}">
        <Border Margin="3">
          <Image Source="{Binding Source}"/>
        </Border>
      </DataTemplate>
    </Window.Resources>

    <ListBox Name="listBox" ItemsSource="{Binding MyPhotos}" Background="Silver" Width="600" Margin="10" SelectedIndex="0" ItemTemplate="{StaticResource MyItemTemplate}"/>

更新

将您的DataContext更改为this

listBox.DataContext = this;

答案 1 :(得分:2)

  1. 我的照片必须是属性 { set}函数,而不是 Field

      

    public ObservableCollection<Photo> MyPhotos { get; set; }

  2. 后面的代码:

      

    DataContext = this

         

    listBox.DataContext = MyPhotos

  3. XAML:添加DisplayMemberPath以显示数据

      

    DisplayMemberPath =“源”