Question

J'essaie de lier la propriété Maxlength d'une zone de texte WPF à une constante connue d'une classe. J'utilise c #.

La classe a une structure pas très différente de la suivante:

namespace Blah
{
    public partial class One
    {
        public partial class Two
        {
             public string MyBindingValue { get; set; }

             public static class MetaData
             {
                 public static class Sizes
                 {
                     public const int Length1 = 10;
                     public const int Length2 = 20;
                 }
             }
        }
    }
}

Oui, il est profondément imbriqué, mais malheureusement dans ce cas, je ne peux pas trop bouger les choses sans avoir à réécrire énormément.

J'espérais pouvoir associer la zone de texte MaxLength aux valeurs Length1 ou Length2 mais je ne parviens pas à le faire fonctionner.

Je m'attendais à ce que la liaison ressemble à ce qui suit:

<Textbox Text="{Binding Path=MyBindingValue}" MaxLength="{Binding Path=Blah.One.Two.MetaData.Sizes.Length1}" />

Toute aide est appréciée.

Merci beaucoup

Était-ce utile?

La solution 2

Fixé!

Au départ, j'ai essayé de faire ceci:

{Binding Path=MetaData+Sizes.Length1}

qui a bien compilé, cependant la liaison a échoué au moment de l'exécution, bien que la classe 'Two' soit le contexte de données que le chemin ne puisse pas résoudre en classes statiques internes (aurais-je pu faire quelque chose comme: {Binding Path = {x: Static MetaData + Size.Length1}}?)

J'ai dû modifier un peu la disposition de mes classes, mais la reliure fonctionne maintenant.

Nouvelle structure de classe:

namespace Blah
{
    public static class One
    {
        // This metadata class is moved outside of class 'Two', but in this instance
        // this doesn't matter as it relates to class 'One' more specifically than class 'Two'
        public static class MetaData
        {
            public static class Sizes
            {
                public static int Length1 { get { return 10; } }
                public static int Length2 { get { return 20; } }
            }
        }

        public partial class Two
        {
            public string MyBindingValue { get; set; }
        }
    }
}

Ensuite, ma déclaration de liaison est la suivante:

xmlns:local="clr-namespace:Blah"

et

MaxLength="{x:Static local:MetaData+Sizes.Length1}"

Ce qui semble fonctionner correctement. Je ne sais pas si les constantes doivent être converties en propriétés, mais cela ne semble pas poser de problème.

Merci à tous pour votre aide!

Autres conseils

MaxLength="{x:Static local:One+Two+MetaData+Sizes.Length1}"

Propriétés de référence des périodes. Les signes plus font référence aux classes intérieures.

essayez de vous lier avec x: Static. ajoutez un espace de noms xmlns: local avec l'espace de noms de Sizes à votre en-tête xaml, puis créez un lien avec quelque chose comme ceci:

{x:Static local:Sizes.Length1}

Malheureusement, l'erreur suivante s'affiche avec le code . Tapez 'One.Two.MetaData.Sizes' not found . Je ne peux pas créer un espace de noms local plus profond que "Blah". (bien selon VS2008 quand même)

xmlns:local="clr-namespace:Blah"

et

MaxLength="{x:Static local:One.Two.MetaData.Sizes.Length1}"

Si One n’est pas une classe statique, vous ne pouvez pas le lier avec x: Static. pourquoi utiliser des classes internes? si les métadonnées sont en dehors de deux et que Sizes est une propriété, vous pouvez facilement y accéder avec x: Static. dans ce cas, vous ne pouvez pas vous lier à des types, uniquement à des objets existants. mais One et Two sont des types, pas des objets.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top