Mam klasę viewmodel, która udostępnia właściwość MediaFile typu FileInfo i chcę powiązać właściwość z właściwością Source obiektu MediaElement.Binding Źródło-Właściwość MediaElement do FileInfo
Problem polega na tym, że właściwość źródłowa MediaElement oczekuje Uri, ale nie mogę uzyskać dostępu do właściwości FullName (w konwerterze zdefiniowanym w powiązaniu) klasy FileInfo, ponieważ spowoduje to wzrost wyjątku SecurityException.
W przypadku obrazów nie ma problemu, ponieważ kontrolka obrazu oczekuje obiektu ImageSource, który można utworzyć w konwerterze za pomocą strumienia instancji FileInfo.
Jak zdefiniować powiązanie, aby mój MediaElement uzyskał właściwe źródło? Lub jak mogę przekazać MediaElement do konwertera, aby móc wywołać SetSource (Stream) na MediaElement.
ViewModel:
public class ViewModel {
// additional code omitted
public FileInfo MediaFile {get; set;}
}
Konwerter:
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();
}
}
Wiązania:
<Image Source="{Binding MediaFile, Converter={StaticResource fileInfoToMediaConverter} }"/>
<MediaElement Source="{Binding MediaFile, Converter={StaticResource fileInfoToMediaConverter}}/>
Dzięki za odpowiedź. Aplikacja działa w przeglądarce, więc dostęp do FullName nie będzie możliwy. – Jehof