gpt4 book ai didi

c# - 在列表框中绑定(bind)图像

转载 作者:行者123 更新时间:2023-12-02 12:19:51 25 4
gpt4 key购买 nike

我有一个从数据表填充的列表框。我希望每个项目在列表框中都有一个特定的图像,但我想根据每个项目具有的 id 设置图像。例如,我有:

产品

橙色

苹果

ID

1

2

图像命名为:Item.1.pngItem.2.png

所以,在我的列表框中,我有苹果,旁边有一个名为:Item.2.png 的图像。

我的问题是我不知道如何进行条件绑定(bind)。我不想在我的模板上有数百行针对每个项目执行此操作。我需要使用条件来执行此操作,例如:if(product.id==1), Image.Source=Item.1.png。在wpf中有什么办法可以做到这一点吗?

最佳答案

在我看来,您需要一个 IdToImageConverter 来决定应根据 Id 属性的值显示哪个 Image 。像这样的事情应该可以解决问题:

[ValueConversion(typeof(int), typeof(ImageSource))]
public class IdToImageConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value.GetType() != typeof(int) || targetType != typeof(ImageSource)) return false;
int id = (int)value;
if (id < 0) return DependencyProperty.UnsetValue;
string imageName = string.Empty;
switch (id)
{
case 1: imageName = "Item.1.png"; break;
case 2: imageName = "Item.2.png"; break;
}
if (imageName.IsEmpty()) return null;
return string.Format("/AppName;component/ImageFolderName/{0}", imageName);
}

public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return DependencyProperty.UnsetValue;
}

然后您可以在 ListBox.ItemTemplate 中使用它,如下所示:

<YourConvertersXmlNamespacePrefix:IdToImageConverter x:Key="IdToImageConverter" />
...
<ListBox ItemsSource="{Binding Items}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Source="{Binding Id, Converter={StaticResource
IdToImageConverter}}" />
<TextBlock Text="{Binding Name}" Margin="5,0,0,0" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

关于c# - 在列表框中绑定(bind)图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20073681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com