2009-10-07 4 views
2

Lors de l'utilisation de PRISM, la manière normale de raccorder des éléments avec unity consiste à définir une interface et à enregistrer une implémentation avec cette interface. Maintenant, j'ai un problème concernant les vues. Le scénario est simple:Résolution de l'interface comme UIElement (Unity, PRISM, C#)

Supposons un contrôle vidéo personnalisé qui permet de définir une commande de lecture. Ce contrôle est défini par une interface simple "IPlayControlView". Le problème évident, quand je résous ce contrôle et essaye de l'ajouter à un StackPanel, cela ne fonctionne pas, parce que j'ai un IPlayControl, pas un UIElement. Je peux le convertir en UIElement, parce que je sais que c'est un UIElement. Mais est-il une meilleure façon, quelque chose comme

public interface IPlayControlView : UIElement 

Cela ne fonctionne pas, mais peut-être une autre chose fera l'affaire ...

Il est en quelque sorte une question générale, si je résous des vues à l'aide interfaces je vais courir dans ce problème à chaque fois. Peut-être que ce n'est pas la façon dont cela est fait, mais j'ai toujours pensé que l'un des ... Ok, je viens de me faire une idée. Je vais juste étendre le IPlayControl avec une propriété UIElement et le définir comme référence à lui-même. Donc, peu importe, on répond à la question en tapant :-)

S'il y a un meilleur moyen, j'aime toujours apprendre de nouvelles choses. Peut-être un IUIElement?

Chris

Répondre

6

La façon dont vous décrivez dans votre avant-dernier paragraphe est la façon dont je le fais. Par exemple, si je veux utiliser mon IShell comme UIElement (ce qui est assez normal) Je déclare quelque chose comme interface:

public interface IShell 
{ 
    UIElement GetView(); 
} 

Puis dans ma mise en œuvre:

public partial class MyMainShell : UserControl, IShell 
{ 
    public UIElement GetView() 
    { 
     return this; 
    } 
} 
Questions connexes