2010-08-18 53 views
0

有以下目的的定製控件(未在列表中的順序)列表:Silverlight的4:如何顯示

  • 「FieldItem」定製控制;
  • 'Field' - ... XAML-object,它將包含十幾個字段項目;
  • FieldItemViewModel - 承載要用'FieldItem'自定義控件顯示的數據的數據類;
  • 'FieldItem'控件的位置依賴於綁定到控件(X和Y)的數據實體參數;
  • items - ObservableCollection - 包含數據的集合。

問題:爲了讓我的FieldItem的每個項目都顯示在Canvas中,應該在裏面放什麼樣的對象?

我已經計劃使用的ListView ......但無法想象怎麼可能更改列表視圖項目的位置......

有什麼想法,歡迎!

謝謝。

回答

1

你可以有一個簡單的ItemsControl。 ItemsControl只是一個物品的容器。 ItemsPanel應設置爲您的畫布。每個項目的數據模板應該是'FieldItem'控件。 在您的viewmodel中公開一個名爲Items的屬性,它將成爲項目數據的集合。 事情類似:

<ItemsControl ItemsSource="{Binding Items}"> 
<ItemsControl.ItemTemplate> 
    <DataTemplate> 
     <FieldItem /> 
    </DataTemplate> 
</ItemsControl.ItemTemplate> 
    <ItemsControl.ItemsPanel> 
    <ItemsPanelTemplate> 
     <Canvas /> 
    </ItemsPanelTemplate> 
</ItemsControl.ItemsPanel> 

Silverlight不具有ItemContainerStyle但是你可以設置它在代碼:

public class MyItemsControl : ItemsControl 
    { 
     protected override void PrepareContainerForItemOverride(DependencyObject element, object item) 
     { 
      FrameworkElement contentitem = element as FrameworkElement; 
      Binding leftBinding = new Binding("Position.X"); 
      Binding topBinding = new Binding("Position.Y"); 
      contentitem.SetBinding(Canvas.LeftProperty, leftBinding); 
      contentitem.SetBinding(Canvas.TopProperty, topBinding); 
      base.PrepareContainerForItemOverride(element, item); 
     } 
    } 

從這裏摘自:http://forums.silverlight.net/forums/p/29753/96429.aspx

+0

尤瓦,你可以還請說明:我的'FieldItemViewModel'類的哪個屬性應該包含'X'和'Y'值?這應該是一個普通的'X'和'Y'屬性,或者我需要'Position'屬性,它本身具有'X'和'Y'?先謝謝你。 – Budda 2010-08-18 23:56:12

+0

Yuval,謝謝......現在我看到,「Position.X/Y」屬性在綁定到項目的對象內部查看。謝謝! – Budda 2010-08-23 03:26:24

相關問題