我現在開發一個WPF控制這簡直是畫布一樣網格線一些額外的屬性,兒童拖放等力WPF從視圖模型控制更新
我需要一個機制來調用一些我的畫布,從功能的查看模型綁定到包含我的畫布的視圖。 例如,視圖可以包含我的畫布和一個按鈕「顯示網格」。當用戶點擊按鈕畫布時,應該自己繪製網格。
問題是根據MVVM模式執行此操作,而不直接參考視圖的視圖模型中的畫布。 這樣做的最佳做法是什麼?
我現在開發一個WPF控制這簡直是畫布一樣網格線一些額外的屬性,兒童拖放等力WPF從視圖模型控制更新
我需要一個機制來調用一些我的畫布,從功能的查看模型綁定到包含我的畫布的視圖。 例如,視圖可以包含我的畫布和一個按鈕「顯示網格」。當用戶點擊按鈕畫布時,應該自己繪製網格。
問題是根據MVVM模式執行此操作,而不直接參考視圖的視圖模型中的畫布。 這樣做的最佳做法是什麼?
用戶界面相關的東西仍然可以寫在cs文件後面的視圖中。這並不意味着你違反了MVVM。如果視圖模型是用於業務邏輯的,則視圖背後是查看邏輯。要實現更多的封裝和可重用性,您可以使用Behaviors。
你可以編寫一個行爲,執行所有繪畫邏輯並將其附加到按鈕上。即使你可以添加依賴屬性到你的行爲,以獲得更多的控制。
是的,所有特定的UI相關邏輯都在控制代碼隱藏中(我簡單地從Canvas繼承)。有一個綁定到我的按鈕的命令。命令處理程序ShowGrid()處於視圖模型中。我應該寫些什麼來使畫布中的網格線更加清晰? – 2014-11-25 12:29:23
使用布爾類型「ShowGridLines」的依賴項屬性添加行爲。在行爲屬性的回調中執行網格線渲染邏輯。 – Jawahar 2014-11-26 04:51:34
如果我正確理解你,我需要創建一個自定義行爲附加到按鈕,將綁定到布爾屬性,我可以從我的虛擬機更改。這個解決方案存在一個問題:我希望所有渲染邏輯都處於畫布代碼隱藏狀態。我用我的畫布完成了許多類似的任務,並且我不想在幾十種行爲中將渲染邏輯原子化 – 2014-11-26 06:26:41
我沒有時間寫一個答案看看如何使用RoutedCommand 掛鉤在你的控件中並從ViewModel中提取它。 – 2014-11-25 14:35:32