0

我正在C#和Silverlight 5中工作,我試圖顯示一個或多個音頻和/或視頻文件作爲字節數組從數據庫表中檢索。我決定最好的方式來獲得這些字節數組到一個可用的格式是建立在我的視圖模型是獲取服務調用過程中填充一個ObservableCollection名單:如何在Silverlight 5中向StackPanel添加MediaElements的動態列表?

mediaFiles = new ObservableCollection<MediaElement>(); 
foreach (FileUpload fu in FileUploadMediaTable) 
{ 
    using (MemoryStream ms = new MemoryStream(fu.bytes, 0, fu.bytes.Length)) 
    { 
     MediaElement me = new MediaElement(); 
     me.SetSource(ms); 
     mediaFiles.Add(me); 
    } 
} 

現在,我唯一的問題是搞清楚如何添加這些媒體元素進入視圖。我正在考慮用自定義的DataTemplate創建一個新的ItemsControl,該自定義的DataTemplate定義了將MediaElement嵌入到StackPanel中的播放按鈕,但是如何將每個按鈕與特定的MediaElement關聯?

編輯:當然,我想我可以只創建字節陣列的列表,並添加一個MediaElement的對象到的DataTemplate並通過字節數組中與所定義的Bytes2ImageConverter源。當然,也許我可以跳過這一步,並將MediaElement的源代碼綁定到每個字節數組上創建的MemoryStream對象。我不確定最好的處理方式(或者甚至有可能)。

回答

1

您可以創建一個Model類,它將包含媒體源(將綁定到MediaElement Source屬性)和添加數據(需要的字幕,作者等)。您可以使用列表框來顯示所有這些視頻。您應該創建一個項目模板並將其用於列表框項目。此項目模板將包含媒體元素和播放/停止按鈕,您將在其中綁定命令。命令將放置在您的ViewModel類中,您可以將模型綁定爲命令參數。所以,你可以訪問應該播放的中間源(Model class)。播放/停止視頻怎麼樣:您可以創建媒體元素助手,其中將包含附加的依賴屬性(例如:您的模型類中的IsPlaying)。您將綁定真/假值來播放/停止視頻。就這樣。