0

在我的 WPF 项目中,有一个列表框,我必须在其中显示图像并在每个图像旁边显示它们的文本(例如:拍摄照片的日期、位置等)。我已经尝试创建一个通用列表,但我仍然无法将它分配给列表框

就像是

Bscially 我一直在尝试这方面的东西。

public class LoadImages
{
    public static List<ImageLoader> LoadImages()
    {
        List<ImageLoader> img = new List<ImageLoader>();

        Uri uri = new Uri(@"http://somedomain.com/pic.jpg", UriKind.Absolute);
        BitmapImage bi = new BitmapImage(uri);

        img.Add(new ImageLoader("1_1",bi));

        return img;            
    }
}

public class ImageLoader
{
    string mediaid;
    BitmapImage thumbnail;

    public ImageLoader(string mediaid, BitmapImage b)
    {
        this.mediaid = mediaid;
        this.thumbnail = b;
    }
}

我的 XAML 看起来像这样。

        <ListBox Name="ListBox1" SelectionMode="Extended" ItemsSource="{Binding}"
             Width="300" Height="300" IsSynchronizedWithCurrentItem="True">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Image Source="{Binding thumbnail}"/>
                    <TextBlock Text="{Binding mediaid}"/>
                </Grid>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

暂时我已经设置了 Window.DataContext

<Window.DataContext>
    <ObjectDataProvider ObjectType="{x:Type local:LoadImages}" MethodName="LoadImages"/>
</Window.DataContext>

但是每次我运行应用程序时,列表框都会显示为空。

有什么建议么。

4

3 回答 3

1

图像元素确实支持源属性的 Uris。为什么不让您的 LoadImages 类返回一组 Uris 而不是图像?图像元素也可以为你做异步工作;)

于 2009-03-24T15:41:00.760 回答
0

thumbnail 和 mediaid 不公开,因此绑定失败。

于 2009-03-24T17:56:39.840 回答
0

经过大量阅读和谷歌搜索后,我找到了答案,我在 ImageLoader 类中所要做的就是为 mediaid 和缩略图创建属性,然后绑定到列表框现在就像一个字符一样工作。所以上面问题中的 ImageLoader 类现在看起来像

public class ImageLoader
{
    string mediaid;
    BitmapImage thumbnail;

    public string MediaId
    {
        get { return mediaid; }
        set { mediaid = value; }
    }

    public BitmapImage Thumbnail
    { 
        get { return thumbnail; } 
        set { thumbnail = value; } 
    }

    public ImageLoader(string mediaid, BitmapImage b)
    {
        this.mediaid = mediaid;
        this.thumbnail = b;
    }
}
于 2009-03-28T08:37:49.137 回答