Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将collection绑定到WPF中的列表框_C#_Wpf - Fatal编程技术网

C# 将collection绑定到WPF中的列表框

C# 将collection绑定到WPF中的列表框,c#,wpf,C#,Wpf,我有WPF的基本问题,我尝试设置DataContext,绑定到集合,但不知何故,我仍然无法让它工作。我一直在寻找这样一个基本的问题。。。我一定错过了一些非常简单的东西。我感谢任何帮助:) 代码隐藏: public ObservableCollection<Photo> MyPhotos = new ObservableCollection<Photo>(); public DataTemplate() { InitializeComponent(); listBo

我有WPF的基本问题,我尝试设置
DataContext
,绑定到集合,但不知何故,我仍然无法让它工作。我一直在寻找这样一个基本的问题。。。我一定错过了一些非常简单的东西。我感谢任何帮助:)

代码隐藏:

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

您需要将
DataTemplate
作为
ItemTemplate
引用到
列表框中。在
数据模板中定义

<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}"/>
  • MyPhotos必须是属性{get;set}函数,而不是字段

    publicobservableCollection MyPhotos{get;set;}

  • 代码隐藏:

    DataContext=this

    listBox.DataContext=MyPhotos

  • XAML:添加DisplayMemberPath以显示数据

    DisplayMemberPath=“源”


  • 可能重复什么是
    照片
    类?分享细节。您缺少属性绑定。你需要实施datatemplate@GaurangDave更新问题:)@jsanalytics将此添加到代码中,不是吗work@MichałTurczyn检查我答案中的更新。您的DataContext是错误的。
    public class Photo
    {
      public string Source { get; set; }
      public Photo(string path)
      {
        Source = path;
      }
    }
    
    <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}"/>
    
    listBox.DataContext = this;