У меня есть класс viewmodel, который предоставляет свойство MediaFile типа FileInfo, и я хочу привязать свойство к свойству Source MediaElement.Binding Source-Свойство MediaElement для FileInfo
Проблема заключается в том, что свойство Source объекта MediaElement ожидает Uri, но я не могу получить доступ к свойству FullName (в конвертере, определенном в привязке) класса FileInfo, потому что это приведет к возникновению исключения SecurityException.
С изображениями нет проблем, потому что управление Image ожидает объект ImageSource, который я могу создать в конвертере, используя поток экземпляра FileInfo.
Как определить привязку, чтобы мой MediaElement получил правильный источник? Или как я могу передать MediaElement в конвертер, чтобы я мог вызвать SetSource (Stream) на MediaElement.
ViewModel:
public class ViewModel {
// additional code omitted
public FileInfo MediaFile {get; set;}
}
Преобразователь:
public class FileInfoToMediaConverter : IValueConverter {
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
var file = value as System.IO.FileInfo;
if (MediaResourceFactory.IsImage(file.Extension)) {
System.Windows.Media.Imaging.BitmapImage image = new System.Windows.Media.Imaging.BitmapImage();
image.SetSource(file.OpenRead());
return image;
}
else if (MediaResourceFactory.IsVideo(file.Extension)) {
// create source for MediaElement
}
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
throw new NotImplementedException();
}
}
привязок:
<Image Source="{Binding MediaFile, Converter={StaticResource fileInfoToMediaConverter} }"/>
<MediaElement Source="{Binding MediaFile, Converter={StaticResource fileInfoToMediaConverter}}/>
Спасибо за ваш ответ. В приложении работает In-Browser, поэтому доступ к FullName будет отсутствовать. – Jehof