2010-08-18 119 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

相关问题