在Silverlight中实现IValueConverter接口

时间:2011-11-21 17:54:55

标签: c# silverlight silverlight-4.0 ivalueconverter

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

可能是什么问题?

2 个答案:

答案 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有关...所以我得到了它的工作!!