如何DataBind我的图像控件以自动获取player.PlayerImage更新?正如您从我的代码中看到的,我尝试设置数据绑定,但它不起作用。
下面是我当前的设置:
我有一个实现INotifyPropertyChanged的名为CDGPlayer的CLR类。
CDGPlayer类具有一个名为PlayerImage的属性
private Image playerImage;
public Image PlayerImage
{
get { return playerImage; }
set
{
if (value != playerImage)
{
playerImage = value;
NotifyPropertyChanged("PlayerImage");
}
}
}我有一个WPF客户端,我想使用CDGPlayer。
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:CDG="clr-namespace:GoldenKaraokeLib.CDG;assembly=GoldenKaraokeLib"
xmlns:local="clr-namespace:GoldenKaraokePlayerWPF"
x:Class="GoldenKaraokePlayerWPF.Window1"
Title="Window1" Height="300" Width="654"
x:Name="CDGPlayerHost" Loaded="CdgPlayerHostLoaded" Background="#FFCD6F6F">
<Window.Resources>
<local:CdgImageConverter x:Key="CDGImageConverter"/>
</Window.Resources>
<Grid>
<Grid.DataContext>
<CDG:CDGPlayer x:Name="player"/>
</Grid.DataContext>
<Border BorderBrush="Black" BorderThickness="5">
<Image x:Name="CDGImage" Source="{Binding PlayerImage, Converter={StaticResource CDGImageConverter}, UpdateSourceTrigger=PropertyChanged}"/>
</Border>
</Grid>
</Window>在Window1.cs文件中,我有一个调用CDGPlayer类实例并调用Play方法的Loaded事件。此方法生成一个新的System.Drawing.Image并将其存储在PlayerImage中。
我知道CDGImage源属性不能接受System.Drawing.Image,所以我尝试编写一个粗糙的转换器。但是,这只在窗口加载时调用一次。
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
try
{
MemoryStream ms = new MemoryStream();
Image bitmap = value as Image;
BitmapImage bi = new BitmapImage();
if (bitmap != null)
{
bitmap.Save(ms, ImageFormat.Bmp);
bi.BeginInit();
bi.StreamSource = ms;
bi.EndInit();
}
return bi;
}
catch
{
return new BitmapImage();
}
}我做错了什么?
发布于 2010-07-11 11:03:16
当我尝试时,您的绑定似乎是正确的。不过,看起来你的转换器有一个bug。您不会倒回流,因此BitmapImage将尝试从结尾开始读取,而不是从开头开始。添加对Stream.Seek的调用:
if (bitmap != null)
{
bitmap.Save(ms, ImageFormat.Bmp);
ms.Seek(0, SeekOrigin.Begin); // Set position back to the start of the stream
bi.BeginInit();
bi.StreamSource = ms;
bi.EndInit();
}https://stackoverflow.com/questions/3221522
复制相似问题