Как я могу DataBind свой элемент управления изображениями, чтобы автоматически получить плеер. PlayII обновления?Как вы можете видеть из моего кода, я попытался настроить привязку данных, однако она не работает.
Ниже приведены мои текущие настройки:
У меня есть класс CLR с именем CDGPlayer
, который реализует INotifyPropertyChanged
.
Класс 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 У меня есть событие Loaded
, которое вызывает экземпляр класса CDGPlayer и вызывает метод Play
.Этот метод генерирует новый System.Drawing.Image
и сохраняет его в PlayerImage
.
Я знаю, что свойство Source 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();
}
}
Что я делаю не так?