【发布时间】:2011-08-28 16:27:51
【问题描述】:
我有一个视图模型类,它提供 FileInfo 类型的属性 MediaFile,我想将该属性绑定到 MediaElement 的 Source 属性。
问题在于,MediaElement 的 Source 属性需要一个 Uri,但我无法访问 FileInfo 类的 FullName 属性(在绑定中定义的转换器中),因为这将引发 SecurityException。
图像没有问题,因为 Image 控件需要一个 ImageSource 对象,我可以使用 FileInfo 实例的流在转换器中创建该对象。
如何定义绑定,以便我的 MediaElement 获得正确的来源?或者我如何将 MediaElement 传递给转换器,以便我可以在 MediaElement 上调用 SetSource(Stream)。
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}}/>
【问题讨论】:
标签: c# silverlight data-binding silverlight-4.0 mvvm