2011-11-21 48 views
2

实施的IValueConverter接口我有以下的IValueConverter实现在Silverlight

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。产品作为我的组合框中的项目。 ComboBox

可能是什么问题?

回答

3

你需要指定的DataTemplateItemTemplate组合框:

<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> 
+0

这显示产品的名称,图像仍然没有得到显示... –

0

我犯了这样的

return new BitmapImage(new Uri("../Images/" + (string)(value), UriKind.Relative)); 

的回报,改变了以下

ImageUrl = @"Apple.jpg" 

开始BitMapImage没有用IM填充年龄,它显示为空。我的猜测是这与我提供不好的URI有关...所以我得到它的工作!

+0

是的,你正在从本地文件系统获取图像。 Silverlight不会让你这样做。 – AnthonyWJones