在MVVM場景中,使用linq2sql從數據庫表創建模型「Impegni」。 Wpf表單顯示所有'Impegni'字段,這是通過將視圖模型ImpegnoSelezionato暴露的類型爲'Impegni'的對象綁定到包含所有其他UI控件的網格的DataContext來實現的。 不幸的是,在表單中需要顯示更多的字段,並且其中的一部分可能直接從模型派生(例如,其中一個是兩個模型字段之間的布爾比較)。 第一種解決方案是公開視圖模型中的其他屬性。 由於在網格上每一個新的控制,顯示在視圖模型中添加的屬性設置DataContext的需求是這樣的:模型對象缺少某些屬性時的數據綁定
DataContext="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType= {x:Type Window}}, Path=DataContext.ActiveWorkspace}"
這是一個非常奇怪的語法,對我來說,我不能相信沒有什麼簡單的使用。
我的第二個想法是爲'Impegni'模型創建一些方法擴展。這些方法不需要任何參數,並且將等同於屬性的getter方法。
經過一些網上衝浪,似乎將控件綁定到方法而不是屬性的唯一方法是使用ObjectDataProvider,但我無法找到在「ObjectType =」{x:Type ??}中寫入的內容'
第三個想法是使用一些更多的屬性重新生成模型,但正如我之前所說,它來自使用linq2sql的dfatabase表:我是newbe,我不知道是否可以添加額外的字段不在數據庫表。
因此,在我只寫了第一時間的想法已經被證明是工作,但我想的東西有點清潔。 有什麼建議?
由於 菲利普
第一個選項中的語法非常好 – 2012-02-20 12:35:46
在找到好奇的方式來覆蓋DataContext之前,我不得不搜索幾個小時。我希望能夠以更簡單的方式實現該目標(將特定組件的DataContext恢復爲默認值)。 – Filippo 2012-02-20 14:45:55
您只需在父窗口的ViewModel中查找「ActiveworkSpace」。這沒有錯。 – 2012-02-20 15:26:57