2010-11-18 5 views
1

In Blend 4 versuche ich eine Beispieldatenquelle aus meiner VM-Klasse zu generieren. Die Klasse verfügt über eine Eigenschaft, die ObservableCollection einer Schnittstelle und eine andere Eigenschaft mit ObservableCollection einer Klasse zurückgibt. Beim Generieren einer Beispieldatenquelle generiert das Mischen Daten für die Klasseneigenschaft, nicht jedoch für die Schnittstelle. Gibt es einen Weg dahin? Mein Code benötigt unbedingt die Schnittstelle, aber gleichzeitig möchte ich die Beispieldaten sehen, die für die Entwurfszeit generiert wurden.Blend erzeugt keine Beispieldaten für VM

+0

ich das gleiche Problem haben, meine VM verfügt über eine Schnittstelleneigenschaft und Blend zeigt auch nicht die Eigenschaften im Bindungsfenster an. – TDaver

+0

Können Sie bitte ein Beispiel der Klasse zeigen? –

+0

@Michael S. Scherotter: 'Öffentliche Klasse PartialViewModel {public M Model {get; private set;}} 'und dann ist mein DataContext' öffentliche Klasse MyVM {public PartialViewModel Partial {get; private set;}} und natürlich 'public interface IDataInterface {string Stuff {get; set;}}' Und mein Ziel ist es, die Partial.Model.Stuff -Eigenschaft in Blend zu sehen. Aber Stuff taucht nicht auf, und da die ursprüngliche Frage auch keine Beispieldaten enthält! – TDaver

Antwort

2

Das Problem hier ist, dass Blend nicht weiß, welche Art von Objekt als die konkrete Implementierung von IDataInterface zu erstellen. Ich würde zwei Entwurfszeit-Datenquellen empfehlen die Erstellung, eine für die myvm und eine für die konkrete IDataInterface Umsetzung:

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; 
     } 
    } 
} 

und dann würde der XAML sein:

<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

Ich werde es ausprobieren! Vielen Dank! – TDaver

+0

Ich habe es ausprobiert, das Problem war, dass ich Partial.Model nicht dem DataContext des inneren Gitters zuweisen wollte, da ich sowohl die Eigenschaften von Model und MyVM brauche, aber die Schnittstelle temporär durch die konkrete Klasse in MyVM ersetzen würde arbeite (wie Johannes vorgeschlagen hat) – TDaver

+0

Okay, deine Lösung ist nicht perfekt, aber ich habe die kleineren Details nicht wirklich spezifiziert, also werde ich das Kopfgeld sowieso vergeben. Danke noch einmal. – TDaver

Verwandte Themen