9
我有一個viewmodel類,它提供FileInfo類型的MediaFile屬性,並且我想將該屬性綁定到MediaElement的Source屬性。將MediaElement的屬性綁定到FileInfo
問題是,MediaElement的Source屬性需要Uri,但我無法訪問FileInfo類的FullName屬性(在綁定中定義的轉換器中),因此會引發SecurityException。
圖像沒有問題,導致圖像控件需要一個ImageSource對象,我可以使用FileInfo實例的流在轉換器中創建該對象。
如何定義綁定,以便我的MediaElement獲取正確的源代碼?或者,如何將MediaElement傳遞給轉換器,以便我可以在MediaElement上調用SetSource(Stream)。
視圖模型:
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 2011-05-23 06:16:32