2010-11-18 22 views
1

Dans le mélange 4, j'essaie de générer une source de données d'exemple à partir de ma classe de machine virtuelle. La classe a une propriété qui retourne observablecollection d'une interface et une autre propriété avec observablecollection d'une classe. Lors de la génération d'une source de données exemple, Blend génère des données pour la propriété de classe mais pas pour l'interface. Y a-t-il un moyen de contourner ceci? Mon code nécessite absolument d'avoir l'interface, mais en même temps je veux pouvoir voir les exemples de données générés pour la conception.Le mélange ne génère pas de données d'échantillon pour la machine virtuelle

+0

J'ai la même question, mon VM a une propriété d'interface et Blend n'affiche pas non plus les propriétés dans la fenêtre de liaison. – TDaver

+0

Pouvez-vous s'il vous plaît montrer un exemple de la classe? –

+0

@Michael S. Scherotter: 'public class PartialViewModel {public M Modèle {get; private set;}} 'et puis mon DataContext est' public class MyVM {public PartialViewModel Partiel {get; private set;}} 'et bien sûr' interface publique IDataInterface {chaîne Stuff {get; set;}} 'Et mon but est de voir la propriété Partial.Model.Stuff dans blend. Mais Stuff n'apparaît pas, et comme la question originale mentionnée ne contient pas de données d'échantillon non plus! – TDaver

Répondre

2

Le problème ici est que Blend ne sait pas quel type d'objet créer comme implémentation concrète de IDataInterface. Je suggère de créer deux données en temps de conception des sources, l'un pour l'MyVM et l'autre pour la mise en œuvre de IDataInterface béton:

namespace SilverlightApplication1 
{ 
    public interface IDataInterface 
    { 
     string Stuff { get; set; } 
    } 

    public class PartialViewModel<M> 
    { 
     public M Model { get; private set; } 
    } 

    public class ConcreteDataInterface : IDataInterface 
    { 
     public ConcreteDataInterface() 
     { 
      this.Stuff = "Concrete Stuff!"; 
     } 

     public string Stuff {get;set;} 
    } 

    public class MyVM 
    { 
     public PartialViewModel<IDataInterface> Partial 
     { 
      get; 
      private set; 
     } 
    } 
} 

puis le XAML serait:

<UserControl x:Class="SilverlightApplication1.MainPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d" 
    d:DesignHeight="300" d:DesignWidth="400"> 

    <Grid x:Name="LayoutRoot" 
     d:DataContext="{d:DesignData /SampleData/MyVMSampleData.xaml}"> 
     <Grid DataContext="{Binding Partial.Model}" 
      d:DataContext="{d:DesignData /SampleData/ConcreteDataInterfaceSampleData.xaml}"> 
      <TextBlock Text="{Binding Stuff}"/> 
     </Grid> 
    </Grid> 
</UserControl> 
+0

Je vais essayer cela! Merci! – TDaver

+0

J'ai essayé, le problème était que je ne voulais pas assigner Partial.Model au DataContext de la grille interne, car j'ai besoin à la fois des propriétés de Model et MyVM, mais remplacer temporairement l'interface par la classe concrète dans MyVM travail (comme Johannes l'a suggéré) – TDaver

+0

D'accord, votre solution n'est pas parfaite, mais je n'ai pas vraiment spécifié les plus petits détails, donc je vais attribuer la prime de toute façon. Merci encore. – TDaver