9
votes

Comment se lier à une propriété singleton à Silverlight 4?

Salut tout le premier post ici :) Commençons par un extrait du code que j'utilise:

<Button Margin="5" Click="btnName_Click"  Visibility="{Binding Source={StaticResource myClass}, Converter={StaticResource visibilityConverter}, Path=MyAttribute, Mode=OneWay}">


0 commentaires

4 Réponses :


5
votes

Vous pourriez avoir votre UserControl, en interne, exposer l'instance MyClass à travers sa propre propriété et lier localement à sa propre instance "myClass". Puisque c'est un singleton, ce sera toujours le même exemple.


3 commentaires

Bonjour M. Copsey, j'aimerais essayer votre suggestion, mais je dois admettre que je ne comprends pas tout à fait comment aborder cela. Je suis toujours nouveau à la programmation Silverlight / XAML. J'apprécierais que vous puissiez élaborer :)


@Tigel: C'est fondamentalement la même chose que l'option ELAD énumérée ci-dessous. Je recommandais simplement de laisser votre singleton seul, mais avoir une propriété dans votre contrôle lui-même (non statique) qui retourne le singleton.


Bon problème résolu. Merci pour votre aide messieurs! @Vladimir Dorokhov @reed Copsey @elad Katz



4
votes

Vous pouvez implémenter le singleton légèrement em> différemment, comme: xxx pré>

alors vous pouvez maintenant faire ce qui suit dans xaml: p> xxx pré>

et liez-le comme ceci: P>

<Button Margin="5" Click="btnName_Click"  Visibility="{Binding Source={StaticResource myClass}, Converter={StaticResource visibilityConverter}, Path=Instance.MyAttribute, Mode=OneWay}">


4 commentaires

Je vais devoir attendre demain pour essayer cela, mais cela ressemble à une bonne solution de contournement. Cependant, est-il considéré comme une bonne pratique de ne pas avoir de getter statique sur un membre statique? Quelle est la conséquence de ne pas avoir la statique getter?


Pas trop. Il est utilisé très souvent lors de la mise en oeuvre de MVVM en Silverlight, dans le motif de la vueModellocator qui a été proposé par Laurent Bugnion (MVVMlight). C'est largement accepté.


Je me suis souvenu que dans certains endroits de mon code, j'ai besoin d'accéder à mon singleton via un appel "myClass.Instance.somemethod". Cela ne sera pas possible si le getter n'est pas statique.


Vous pouvez également exposer un membre statique .. mais viens y penser, la solution de Vladimir est meilleure que la mienne.



8
votes

Je conseille d'ajouter une classe supplémentaire myclassprovider : xxx

instance de cette classe, vous pouvez placer n'importe où et se lier à son myClass propriété .


0 commentaires

3
votes

J'ai vérifié que ce qui suit fonctionne dans Silverlight 5:

Gardez votre classe myClass code> inchangé, puis créez une propriété de myClass code> avec le nom de MyClass Code> Dans votre entreprise CLASSE USERCONTROL: P>

<TextBlock Text="Visibility Test" Visiblity="{Binding Path=MyClass.MyProperty, Converter={somexmlns:SomeVisiblityConverterIfNecessary}", ElementName="yourBusinessUserControlName"/>


0 commentaires