0

私はC#とSilverlight 5で作業しており、データベーステーブルからバイト配列として取得された1つ以上のオーディオファイルやビデオファイルを表示しようとしています。これらのバイト配列を使用可能な形式にするための最良の方法は、サービス呼び出し中に入力されるObservableCollectionリストをViewModelに作成することでした。

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

今、私の唯一の問題は、これらのメディア要素をビューに追加する方法を理解することです。StackPanelにMediaElementsを埋め込む再生用のボタンを定義するカスタムDataTemplateを使用して新しいItemsControlを作成することを考えていましたが、各ボタンをその特定のMediaElementに関連付けるにはどうすればよいですか?

編集:もちろん、バイト配列のリストを作成し、MediaElementオブジェクトをDataTemplateに追加して、Bytes2ImageConverterが定義されたソースにバイト配列を渡すことができると思います。もちろん、そのステップをスキップして、MediaElementのソースを各バイト配列で作成されたMemoryStreamオブジェクトにバインドすることもできます。続行するための最良の方法がわかりません(または、このようなことが可能かどうかもわかりません)。

4

1 に答える 1

1

メディアソース(MediaElement Sourceプロパティにバインドされます)と必要な追加データ(キャプション、作成者など)を含むModelクラスを作成できます。これらすべてのビデオを表示するためのリストボックスを使用できます。アイテムテンプレートを作成し、リストボックスアイテムに使用する必要があります。このアイテムテンプレートには、メディア要素と、コマンドをバインドする再生/停止ボタンが含まれます。コマンドはViewModelクラスに配置され、モデルをコマンドパラメーターとしてバインドできます。したがって、再生する必要がある中間ソース(モデルクラス)にアクセスできます。ビデオの再生/停止について:メディア要素ヘルパーを作成できます。このヘルパーには、添付された依存関係プロパティが含まれます(例:モデルクラスのIsPlaying)。ビデオの再生/停止にはtrue/falseの値をバインドします。それで全部です。

于 2012-07-04T05:31:44.060 に答える