2010-09-09 7 views
1

Fait un exemple beaucoup plus simple, nous espérons que quelqu'un peut suivre et me aiderliste de liaison Expression Blend ne répertorie pas les propriétés d'interface pour la liaison

Voici mon code.

ViewModel

public class ViewModel 
{ 
    private Person _noninterfacePerson; 
    private IPerson _interfacePerson; 

    public ViewModel() 
    { 
     _noninterfacePerson = new Person(); 
     _interfacePerson = new Person(); 
    } 

    public Person NonInterfacePerson 
    { 
     get { return _noninterfacePerson; } 
    } 

    public IPerson InterfacePerson 
    { 
     get { return InterfacePerson; } 
    } 

} 

Personne

public class Person : IPerson 
{ 
    public Person() 
    { 

    } 

    public string Name 
    { 
     get; 
     set; 
    } 

    public int age 
    { 
     get; 
     set; 
    } 

} 

IPerson

public interface IPerson 
{ 
    int age { get; set; } 
    string Name { get; set; } 
} 

Voir

<Window x:Class="WpfApplication2.MainWindow" 
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" 
     xmlns:local="clr-namespace:WpfApplication2" 
     mc:Ignorable="d" 
Title="MainWindow" Height="350" Width="525"> 
<Grid d:DataContext="{d:DesignInstance local:ViewModel}"> 

</Grid> 
</Window> 

Dans Expression Blend si j'insère un bloc de texte, cliquez sur "Options avancées" -> Liaison de données ... -> Contexte de données Je vois à la fois InterfacePerson et NonInterfacePerson comme options à lier. Cependant, NonInterfacePerson a une petite flèche indiquant les autres propriétés auxquelles je peux me lier. Âge et nom dans ce cas.

La même chose se produit lorsque je mets d: DataContext à un d: DesignData Source. Je n'ai pas utilisé ça pour cet exemple parce que c'est plus compliqué. Mais c'est là que je veux vraiment que cela fonctionne car alors je peux voir toutes mes options de liaison ET avoir des données d'exemple.

Si je place ce à mon avis:

<Window x:Class="WpfApplication2.MainWindow" 
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" 
     xmlns:local="clr-namespace:WpfApplication2" 
     mc:Ignorable="d" 
Title="MainWindow" Height="350" Width="525"> 
<Window.Resources> 
<local:ViewModel x:Key="DummyVM"/> 
</Window.Resources> 
<Grid d:DataContext="{Binding Source={StaticResource DummyVM}}"> 

</Grid> 
</Window> 

Ensuite, je peux voir les propriétés de InterfacePerson, cependant, je ne peux toujours pas obtenir la mise en œuvre facile de l'échantillon des données que je voudrais à l'aide d: DesignData.

Il convient de noter que dans tous les cas, si je tape manuellement le chemin, cela fonctionne très bien. Il s'agit simplement de faire en sorte que Blend les montre, donc il est plus facile de configurer les liaisons.

Merci pour toute aide que vous pouvez fournir à ce sujet!

Répondre

1

Je suis assez sûr qu'ils utilisent la réflexion pour identifier les propriétés d'un objet et une interface est seulement une description de la mise en page, pas un objet réel, n'a donc pas de propriétés réfléchies.

Espérons que cela aide.