2012-07-12 17 views
0

我正在構建一個pos系統,該系統具有一個主ContentControl以顯示應用程序的不同屏幕。我使用DataTemplates將我的視圖模型映射到視圖。在ContentControl中顯示的不同視圖之間導航我想在UserControl卸載(或ContentControl更改)時將UserControl的屏幕截圖存儲在視圖模型中。用戶控件在卸載前的屏幕截圖

我這裏貼一個相關的問題WPF Binding FrameworkElement event to command中,我嘗試將命令綁定到FrameworkElement.Unloaded但是,這並不工作(見答案在該鏈接)

這是可能沒有打破MVVM模式?

+2

你 「破發」 MVVM當視圖模型做UI的工作是唯一的一次。 MVVM!=沒有隱藏代碼。 Codebehind適用於* UI代碼*。 – Will 2012-07-12 13:10:03

+0

首先做viewmodel爲什麼你需要事件命令呢?你的viemwodel處理導航,因此viewmodel知道什麼時候有人想要一個新的視圖,並可以保存舊的截圖。 – blindmeis 2012-07-12 13:13:29

+0

@blindmeis - 是的,viewmodel處理導航,所以我可以確定它何時發生變化,但是,獲取屏幕截圖是我不知道如何處理。 – 2012-07-12 13:23:43

回答

1

here是如何在wpf中執行截圖的不錯鏈接。

這裏是我會做:

我mainviewmodel其處理導航應公開事件並設置新的contentviewmodel之前引發此事件。舊的contentviewmodel應該位於eventargs中。在你的主窗口代碼隱藏中你訂閱了這個事件(這裏沒有打破mvvm)。當有事件發生時,您可以調用截圖方法並將結果放到oldviewmodel中。

編輯:

主窗口的代碼隱藏

void NavigationChangingEvent(object sender, NavChangingArgs args) 
{ 
    var oldvm = args.ChangingViewmodel; 
    oldvm.Screenshoot = this.mycontentcontrolwheremyviewmodelareshown.GetJpgImage(1, 90); 
} 
+0

謝謝,這是我發現的確切功能,並且正在計劃使用。我會嘗試你的建議。 – 2012-07-12 13:27:01

+0

使用該函數,viewmodel事件不會接受UIElement嗎?我想這是我認爲它會打破MVVM – 2012-07-12 13:31:23

+0

以及沒有。視圖模型在事件欄中顯示事件與oldviewmodel。並從您的主視圖codebehind訂閱該事件,並截圖。 – blindmeis 2012-07-12 14:12:02