我有以下IValueConverter实现
public class MyValueConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
try
{
var uri = new Uri((string)(value), UriKind.RelativeOrAbsolute);
var img = new BitmapImage(uri);
return img;
}
catch
{
return new BitmapImage();
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var img = value as BitmapImage;
return img.UriSource.AbsoluteUri;
}
#endregion
}
我有以下
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
var products = new List<Product>()
{
new Product()
{
Name = "Apple",
ImageUrl = @"c:\users\ashutosh\documents\visual studio 2010\Projects\ValueConverter\ValueConverter\Images\Apple.jpg"
},
new Product()
{
Name = "Mango",
ImageUrl = @"c:\users\ashutosh\documents\visual studio 2010\Projects\ValueConverter\ValueConverter\Images\Mango.jpg"
}
};
myComboBox.Items.Clear();
myComboBox.ItemsSource = products;
}
}
XAML如下
<UserControl x:Class="ValueConverter.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
xmlns:this="clr-namespace:ValueConverter"
d:DesignHeight="150" d:DesignWidth="200">
<UserControl.Resources>
<this:MyValueConverter x:Key="ImageConverter"/>
</UserControl.Resources>
<Grid x:Name="LayoutRoot" Background="White">
<ComboBox Name="myComboBox" Height="143" Width="193">
<DataTemplate>
<StackPanel Orientation="Vertical">
<TextBox Text="{Binding Name}"></TextBox>
<Image Source="{Binding ImageUrl, Converter={StaticResource ImageConverter},Mode=TwoWay}"></Image>
</StackPanel>
</DataTemplate>
</ComboBox>
</Grid>
</UserControl>
我只看到valueconverter.Product作为我的组合框中的项目。
可能是什么问题?
答案 0 :(得分:3)
您需要指定DataTemplate
是ComboBox的ItemTemplate
:
<ComboBox Name="myComboBox" Height="143" Width="193">
<!-- Add this! -->
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical">
<TextBox Text="{Binding Name}"></TextBox>
<Image Source="{Binding ImageUrl, Converter={StaticResource ImageConverter},Mode=TwoWay}"></Image>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
答案 1 :(得分:0)
我像这样做了回报
return new BitmapImage(new Uri("../Images/" + (string)(value), UriKind.Relative));
并更改了以下内容
ImageUrl = @"Apple.jpg"
最初BitMapImage没有填充图像,它显示为null。我的猜测是这与我提供错误的URI有关...所以我得到了它的工作!!