我试图通过ItemsTemplate将列表框绑定到自定义“Document”对象的集合,但在尝试将图像绑定到Document.ImageResourcePath属性时遇到问题。这是我的标记
<ListBox Name="lbDocuments">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<Image Source="{Binding Path=ImageResourcePath}"
Margin="5,0,5,0"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
这是包含列表框的表单的加载事件。
private void Window_Loaded_1(object sender, RoutedEventArgs e)
{
List<Objects.Document> docs = Objects.Document.FetchDocuments();
lbDocuments.ItemsSource = docs;
}
My Document类包含一个字符串,该字符串位于我的资源文件夹中的资源图像,具体取决于文档扩展名。
e.g。 (这是文档类中的case语句的一部分)
case Cache.DocumentType.Pdf:
this.ImageResourcePath = "/JuvenileOrganizationEmail;component/Resources/pdf_icon.jpg";
break;
当窗口加载时,当它被绑定到23个完美的文档类型时,我的列表框中绝对没有任何内容。我能做错什么?
答案 0 :(得分:1)
使用ObservableCollection
代替List
,并将引用“等级”设为Window
。
ObservableCollection<Objects.Document> _docs;
确保在Window的Ctor中设置了DataContext。
public Window()
{
_docs = new ObservableCollection<Objects.Document>(Objects.Document.FetchDocuments());
this.DataContext = this;
}
然后,您可以更新Window Loaded事件:
private void Window_Loaded_1(object sender, RoutedEventArgs e)
{
lbDocuments.ItemsSource = _docs;
}
或者,另一种解决方案是将ListBox的ItemsSource直接绑定到集合的公共属性。这假设Ctor(上图)仍在使用。
<ListBox Name="lbDocuments" ItemsSource={Binding Docs}>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<Image Source="{Binding Path=ImageResourcePath}" Margin="5,0,5,0"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
在您的Window.cpp文件中(但是,如果您正在使用MVVM,可能会推荐单独的ViewModel类)
public ObservableCollection<Objects.Document> Docs
{
get { return _docs; }
}