我对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;
}
}
答案 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)
我的照片必须是属性 { set}函数,而不是 Field
public ObservableCollection<Photo> MyPhotos { get; set; }
后面的代码:
DataContext = this
否
listBox.DataContext = MyPhotos
XAML:添加DisplayMemberPath以显示数据
DisplayMemberPath =“源”