在 Silverlight 中实现 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 视为组合框中的项目。
可能是什么问题?
i have the following IValueConverter implementation
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
}
I have the following
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;
}
}
The XAML is as follows
<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>
I just see the valueconverter.Product as the items in my combobox.
What could be the problem ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您需要指定
DataTemplate
是 ComboBox 的ItemTemplate
:You need to specify that the
DataTemplate
is theItemTemplate
for the ComboBox:我像这样返回
并更改了以下内容
最初 BitMapImage 没有填充图像,它显示为 null 。我的猜测是这与我提供了错误的 URI 有关...所以我让它工作了!
i made the return like this
and changed the following
Initially the BitMapImage was not getting populated with the image , it was showing null . My guess is this had something to do with me supplying bad URI ...So i got it to work !!