2013-10-11 68 views
0

我正在編寫一個MVVM結構後面的相當大的WPF應用程序。我想以基本上2種模式運行我的用戶界面。首先是正常的日常運作模式。第二個是我現在一直想知道的一個......我希望能夠在「配置」模式下運行它,用戶將看到UI的方式與正常方式大致相同模式,除了當他們將鼠標懸停在某個控件上時(或者點擊)一個彈出窗口。該彈出框允許用戶更改與該控件相關的某些綁定。我不想公開每個財產(或每個控制)。WPF MVVM:解耦視圖綁定和動態設置綁定

例如: 有一個TextBlock與壓力信號綁定,現在用戶想要將此綁定更改爲溫度信號。他們可以在配置模式下啓動UI,使用TextBlock導航到屏幕,選擇它,然後在彈出窗口中查看Text屬性,然後可以更改爲新的臨時信號。這是一個簡單的例子,但基本上我想要做的。

這可能嗎?記住用戶界面必須寫入視圖(XAML)。任何幫助表示讚賞。

P.S. 這將是一個非常有用但很少使用的功能。也許有兩個項目可以安裝相同的視圖,但不同的視圖模型和模型...至少這是我一直在想的可能是需要的。即使在使用配置模式UI後,必須重新編譯正常模式用戶界面。

+0

在ViewModel級別處理此問題,而不是試圖破解用戶界面。您需要抽象您的視圖並創建這些「小部件」的模型表示。 UI不能被保存(例如在數據庫中)。因此你需要別的東西。 –

+0

你說你想改變綁定,使它永久綁定到其他東西? – Daniel

+0

否則,將XAML文件與應用程序一起部署(而不是編譯到),並在運行時用'XamlReader.Load()'或其他東西加載它們,然後您可以修改XAML文件(在磁盤上)。 –

回答

0

每個彈出窗口都應該有自己的虛擬機(或者如果由於每個彈出窗口的屬性數量太少而導致虛擬機可能共享)並通過消息總線與主虛擬機進行通信。

存儲您的綁定爲用戶設置和當消息從彈出窗口的VM,承載着新的具有約束力的有效載荷到達時,主虛擬機將得到有效載荷,並通過簡單地調用Settings.Default.Save();

基於保存相應的用戶設定根據你的描述,沒有理由使它比IMO更復雜...