我正在開發使用Prism 6的簡單視頻播放器應用程序。我對MVC方法更熟悉,並且有關於跨視圖通信的問題。這裏是我的應用程序如何設計,目前:將視圖模型連接到模型及其更改
瀏覽:
- ControlView - 包含按鈕播放,暫停,快進,快退,停止。
- VideoView - 視頻幀的實際視圖。
- MenuView - 定義帶有兩個功能的頂層菜單欄:加載文件,退出程序。
- 的InfoView - 顯示關於視頻統計信息,例如幀#,長度在時間,文件路徑等
每個視圖具有不帶功能的現在相關聯的視圖模型。
型號:
- 錄像檔案 - 包含有關視頻文件可隨時播放元信息。
我的第一個任務是加載視頻。在MenuView
之內,我可以使用OpenFileDialog
來瀏覽文件。我的目標是在加載文件時以某種方式與其他視圖模型進行通信,以便他們可以執行必要的操作(顯示第一幀,更新視頻的長度等)。
我首先想到的是定義具有對VideoFile
參考服務:
public interface IVideoService {
VideoFile PlayingVideoFile { get; set; }
}
public class VideoService : BindableBase, IVideoService {
private VideoFile _playingVideoFile;
public VideoFile PlayingVideoFile {
get => _playingVideoFile;
set => SetProperty(ref _playingVideoFile, value);
}
}
我只是混淆自己。我不知道如何實現這些意見之間的溝通。我怎樣才能以符合Prism和MVVM原則的方式在所有視圖之間實現模型的交流?
一些交流選項在[這裏]解釋(http://prismlibrary.readthedocs.io/en/latest/WPF/09-Communication/)。我傾向於傾向於[事件聚合](http://prismlibrary.readthedocs.io/en/latest/WPF/09-Communication/#event-aggregation)。 –
所有的視圖模型(除了主視圖模型)都應該是其他視圖模型的子模型。他們可以公開事件,以便他們的父視圖模型可以通過事件安排兄弟姐妹之間的交流。除此之外,其他任何事情都需要花費更多的時間和精力來編寫更難以編寫,理解和維護的代碼。視角模型之間的交流絕非輕而易舉。任何使其變得困難的設計都是根本錯誤的。 –
@EdPlunkett感謝您的評論。你能指點我一些能告訴我Prism如何設置子視圖模型的資源嗎?我不知道如何將它們連接在一起。 – Alex