我構建了一個複雜的UI應用程序,其中一個窗口包含一個Canvas控件,該控件繪製了一個有向無環圖(DAG)的節點。因爲那個窗口相當複雜(並且因爲我對WPF一無所知),所以我認爲我會使用CustomControl(而不是用戶控件,因爲我認爲用戶控件是用來將事物分組在一起的)。我正在嘗試構建的應用程序應該遵循MVVM。MVVM中的自定義控件
現在我創建GraphControl
作爲Selector
控件的子類。
問題1:那個類是ViewModel嗎?我不明白GraphControl
類在盛大的MVVM故事中的角色。
問題2:當我把它添加到我的主要應用程序,我必須做一些事情,如:
<GraphControl DataContext="{Binding RelativeSource={RelativeSource Self}}" ...
看起來對我來說,我真的不明白這些東西是如何工作的。
幫助?
編輯:顯然那個人和我有同樣的問題(https://mutelight.org/datacontext-in-a-custom-control)。在文章中給出的解決方案是這樣:
<GraphControl><Grid DataContext="{Binding RelativeSource={RelativeSource Self}}" ...
這聽起來就像hackish的我雖然...
恐怕這個問題太寬泛了,不適合。爲這樣一個相當複雜的場景提供解決方案,同時回答者也應該解釋MVVM的基礎知識,我想太多了。您應該從理解MVVM背後的原理和理念開始,通過創建像hello-world一樣的應用程序,將文本框綁定到viewmodel屬性並瞭解它。由於MVVM嚴重依賴於框架提供的機制,因此我認爲完全不瞭解您無法完全理解或監督的內容。 –
但是爲了給你提供一個提示,你提供的有關'DataContext'的例子是不正確的。 'DataContext'實際上不是您想要用於某個特定目的的項目(如檢索節點),而是您指定的控件的根目錄。因此,如果您的VM包含深層嵌套的對象,那麼您可以指定它,並且嵌入到其中的任何控件都將解析與其相關的綁定。 –
所以你需要寫這樣的東西: ' ' 其中'Nodes'是包裝此控件的綁定上下文內的屬性。 –