2011-03-16 2 views
1

Il s'agit plus d'une question MVVM que d'une question d'étalonnage, mais elle concerne comment je peux l'accomplir avec calibrage. Je suis nouveau dans le développement de Sliverlight/WP7 alors s'il vous plaît laissez-moi savoir si je ne me décris pas assez bon.ViewModel ou liaison de modèle avec Caliburn.Micro

J'ai caliburn.micro connecté correctement à une application WP7 avec phonecontainer/simplecontainer et viewmodels etc. Le problème que je rencontre, est de savoir comment lier correctement une collection de modèles à l'écran.

Par exemple je le modèle suivant:

SummaryItem 
{ 
    int Id 
    string Name 
    string Description 
} 

Et le viewmodel correspondant:

SummaryViewModel : Conductor<IScreen>.Collection.OneActive 
{ 
    ObservableCollection<SummaryItem> SummaryItems; 

    OnInitialize() 
    { 
     SummaryItems = // REST api call to load items 
    } 
} 

Et la vue:

  <ListBox x:Name="SummaryItems" Height="617" HorizontalAlignment="Left" VerticalAlignment="Top" Width="468" Background="Transparent"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <Button Width="460" Height="120"> 
         <Button.Content> 
          <StackPanel Orientation="Horizontal" Height="120" Width="400"> 
           <TextBlock Text="{Binding Id}" Height="120" FontSize="40" Width="350" /> 
           <TextBlock Text="{Binding Name}" Height="120" FontSize="40" Width="350" /> 
           <TextBlock Text="{Binding Description}" FontSize="40" Width="50" TextAlignment="Right" /> 
          </StackPanel> 
         </Button.Content> 
        </Button> 
        <ContentControl cal:View.Model="{Binding}" VerticalContentAlignment="Stretch" HorizontalContentAlignment="Stretch" /> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 

Ma question est, Quelle est la bonne manière dans silverlight/caliburn pour lier une collection d'objets de modèle à la vue que vous utiliserez dans la navigation. Comme vous pouvez le voir, quand quelqu'un clique sur l'un des boutons, je vais faire un autre appel api de repos sur le prochain viewmodel pour obtenir les données de cet élément et le filmer sur l'écran. Cependant, je ne peux pas obtenir les éléments à apparaître sur l'écran en utilisant ce code de liste. J'ai essayé d'utiliser ItemsSource = SummaryItems, et cela a fonctionné mais il ne semble pas être situé comment les échantillons sont seutp. J'ai remarqué dans les exemples, que la propriété Items est utilisée sur le viewmodel et je ne sais pas comment cela s'intègre avec les objets du modèle.

Je n'ai probablement pas une vision claire de la façon dont la liaison fonctionne dans toutes ces situations et comment le calibrage s'intègre à cela. Quelqu'un pourrait-il me pointer dans la bonne direction?

Toute aide serait grandement appréciée. Merci!

Sean

Répondre

1

Vous devez ajouter les articles à votre ObservableCollection plutôt que de créer une nouvelle ObservableCollection de l'appel:

SummaryViewModel : Conductor<IScreen>.Collection.OneActive 
{ 
    private readonly ObservableCollection<SummaryItem> _items; 
    public ObservableCollection<SummaryItem> SummaryItems 
    { 
     get 
     { 
      return _items; 
     } 
    } 
    ObservableCollection<SummaryItem> SummaryItems; 

    public SummaryViewModel() 
    { 
     _items = new ObservableCollection<SummaryItem>(); 
    } 

    protected override void OnInitialize() 
    { 
     var items = MyRestCall(); 
     SummaryItems.Clear(); 
     foreach(SummaryItem s in items) 
     { 
      SummaryItems.Add(s); 
     } 
    } 
} 
Questions connexes