2011-01-22 86 views
0

你好,我想創建一個網格在xmal中,通過ViewModel填充。 網格是一個5x5網格,我的ViewModel包含一個「MyObject」列表。該對象包含2個int變量Row和Column witch指示Object應該在網格中的哪個位置。 MyObject也是一個視圖模型,並且網格空間應該用MyObject作爲DataContext填充數據模板名稱MyTemplate。 現在,我對xaml和視圖模型非常陌生,但如何做最好的方法呢?Xaml動態網格與Viewmodels

+0

你可能是指xaml xmal權利? – Rumplin 2011-01-22 08:05:09

回答

1

讓我們來看看...
把一個ObservableCollection到VM,然後...

選項1:
...一個簡單的網格成五,訂閱它是從XAML CollectionChanged事件。 cs,將每個添加對象的ContentControls添加到網格,將ContentControl的Grid.Row和Grid.Column屬性綁定到每個對象的屬性,並將DataContext設置爲對象本身,將ContentTemplate設置爲Resources [「MyTemplate」]。 (此外,對於任何刪除的對象找到相應的ContentControl中並刪除它。)
優點:容易
不足:的.cs,沒有設計師的支持

選項2:
......一個ItemsControl到V.將其ItemPanelTemplate設置爲網格,並將ObservableCollection綁定到它的ItemsSource。然後將你的Itemtemplate設置爲MyTemplate。現在,訣竅是根據你的價值將物品放在正確的單元格中。爲此,請使用ItemsControl的ItemContainerStyle屬性,並將容器的Grid.Row和Column綁定到這些屬性。
臨:好的XAML和易於擴展
缺點:ItemContainerStyle是WPF棘手,在Silverlight中缺少的,因此在後者的情況下,你可以忘記它

方案3:
...定製你寫的面板。也許從網格繼承它。如果一個元素被放入它,檢查它是否是DataContext實現了一個包含你的屬性的接口。然後在選項2以此爲ItemsPanel ...
臨:它應該很好地工作
缺點:你必須爲此編寫一個新的面板...

希望這些3之一將是對你合適。

+0

謝謝,因爲它是silverlight我使用我想我會選擇3。 – Androme 2011-01-22 15:10:30