<img/>来源没有处理绑定

时间:2013-05-06 04:11:57

标签: wpf xaml

我试图通过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个完美的文档类型时,我的列表框中绝对没有任何内容。我能做错什么?

1 个答案:

答案 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; }
  }