2011-08-24 4 views
0

Salut, je voudrais écrire un tableau de bord. Vous devriez être capable de faire glisser des widgets sur le tableau de bord à partir d'une source. La mise en page des widgets devrait être libre (premier Canvas, plus tard un certain Panel).WPF Dashboard et Widgets

Mes questions:

  • Avez-vous des conseils pour des informations sur ce type de contrôles pour moi?
  • Est-ce une bonne idée d'utiliser Selector comme BaseClass ou devrait hériter de contrôle

Répondre

2

Je voudrais faire un BaseClass pour tous les widgets, puis construire une ViewModel qui hérite de cette BaseClass pour chaque widget, ainsi qu'un View pour aller avec ce ViewModel

Après cela, j'aurais quelque chose comme ObservableCollection<WidgetBaseViewModel> OpenWidgets dans l'application principale ViewModel, et le lier à un ItemsControl.

Le ItemsControl aurait il est ItemsPanelTemplate ensemble à un Canvas, et chaque WidgetBaseViewModel contiendrait une propriété Top, Left, Height et Width.

L'interface utilisateur réelle pour afficher chaque Widget avec reposerait sur une DataTemplate, et pourrait être tout ce que vous voulez, bien qu'un UserControl serait plus facile

<ItemsControl ItemsSource="{Binding OpenWidgets}"> 
    <ItemsControl.Resources> 
     <DataTemplate DataType="{x:Type local:WidgetAViewModel}"> 
      <local:WidgetAView /> 
     </DataTemplate> 
     <DataTemplate DataType="{x:Type local:WidgetBViewModel}"> 
      <local:WidgetBView /> 
     </DataTemplate> 
    </ItemsControl.Resources> 

    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Canvas ... /> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

En outre, vous aurez besoin de lier votre Canvas.Top/Canvas.Left sur le ItemContainerStyle au lieu de sur le ItemTemplate réel pour l'afficher correctement dans la toile.