2011-05-19 27 views
9

Tôi có một lớp viewmodel cung cấp một thuộc tính MediaFile của kiểu FileInfo và tôi muốn liên kết thuộc tính với thuộc tính nguồn của một MediaElement.Nguồn ràng buộc-Thuộc tính của MediaElement với FileInfo

Vấn đề là, thuộc tính Nguồn của MediaElement mong đợi một Uri, nhưng tôi không thể truy cập thuộc tính FullName (trong một trình chuyển đổi được xác định trong ràng buộc) của lớp FileInfo, điều này sẽ làm tăng SecurityException.

Với hình ảnh không có vấn đề gì, điều khiển hình ảnh mong đợi một đối tượng ImageSource mà tôi có thể tạo trong bộ chuyển đổi bằng cách sử dụng luồng của cá thể FileInfo.

Làm cách nào để xác định ràng buộc để MediaElement của tôi có được đúng nguồn? Hoặc làm thế nào tôi có thể vượt qua trong MediaElement để chuyển đổi để tôi có thể gọi SetSource (Stream) trên MediaElement.

ViewModel:

public class ViewModel { 
    // additional code omitted 
    public FileInfo MediaFile {get; set;} 
} 

Các Chuyển đổi:

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(); 
    } 
} 

Các Bindings:

<Image Source="{Binding MediaFile, Converter={StaticResource fileInfoToMediaConverter} }"/> 
    <MediaElement Source="{Binding MediaFile, Converter={StaticResource fileInfoToMediaConverter}}/> 

Trả lời

5

Are bạn đang chạy ra khỏi trình duyệt với quyền cao? Nếu không, bạn sẽ không có quyền truy cập vào hệ thống tệp cục bộ và bạn sẽ nhận được một ngoại lệ bảo mật. Bạn sẽ vẫn bị giới hạn trong các thư mục mà bạn có quyền truy cập ngay cả với các quyền nâng cao (My Documents, My Pictures, vv).

Giả sử bạn đang OOB với quyền truy cập cao, bạn có thể làm điều gì đó như sau:

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 new Uri(file.FullName).AbsoluteUri; 
    } 
    return null; 
} 
+0

Cám ơn câu trả lời của bạn. Ứng dụng đang chạy trong trình duyệt, do đó, truy cập vào FullName sẽ không có tùy chọn. – Jehof

Các vấn đề liên quan