IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

le binding ne bind que ce qu'il veut


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Par défaut le binding ne bind que ce qu'il veut
    voila je vais soumaitre à votre haute competance le probleme que j'ai rencontré ...
    imaginons un bon usercontrol qui possede une dependency property
    status (pour le moment on s'en tape du type)
    <SASComp:SASStatusStatus= ....

    j' veux le binder sur une colection dans un itemcontrol
    je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <ItemsControl ItemsSource="{Binding Path=FunctionalEquipments[ACB].Tiles, Source={StaticResource Controller}}"
    >
    <ItemsControl.ItemTemplate>
    <DataTemplate>
    <SASComp:SASStatusUpdateText="False" Margin="2,2,0,0" Width="100"
    Text="{Binding Name}"Status="{Binding TMOverview}"/></DataTemplate>
    </ItemsControl.ItemTemplate>
    <ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>
    <WrapPanel Width="206"/>
    </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    </ItemsControl>
    
    un truc simple quoi, et ben vous me croirer je peux changer ce que je veux dans le status des object de ma collection le
    CoerceStatusCallback recois toujours la valeur par defaut !!! etonnant
    d'autant que le name lui focntionne super bien, la j'en entend au fond de la salle qui me dise que le type est peut etre en cause !! peut etre ... mais le type du name est une string et le type de status est une enum a trois valeur { none, on, off }

    maintenant si je fait (avec le meme composant sur la meme fenetre sans changer une ligne de code)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <WrapPanel Width="206">
    <SASComp:SASStatusUpdateText="False"
    DataContext="{Binding Path=FunctionalEquipments[ACB].Tiles[index:0], Source={StaticResource Controller}, Converter={StaticResource TestOnlyConverter}}"
    Text="{Binding Name}"
    Margin="2,2,0,0" Status="{Binding TMOverview}" Width="100"
    />
    <SASComp:SASStatusUpdateText="False"
    DataContext="{Binding Path=FunctionalEquipments[ACB].Tiles[index:1], Source={StaticResource Controller}, Converter={StaticResource TestOnlyConverter}}"
    Text="{Binding Name}"
    Margin="2,2,0,0" Status="{Binding TMOverview}" Width="100"
    />
    
    ca marche .....

    PS ne vous formalisez par pour le [index:0] c'est juste une astuce que j'ai trouvé pour passer un index (plutot qu'une string)
    voir le post http://www.developpez.net/forums/d60...binding-index/

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Par défaut
    bon j'ai trouve une solution (mais je vais oublier l'art de bo code pour la donner)

    comme je sais que le item control me colle le datacontext je vais reccup l'objet quand il le met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    //----------------------------------------------------------------------------------------------------
    public SASStatus()
    {
    InitializeComponent();
    this.DataContextChanged += newDependencyPropertyChangedEventHandler(SASStatus_DataContextChanged);
    }
    //----------------------------------------------------------------------------------------------------
    privateobject internalDataContext = null;
    //----------------------------------------------------------------------------------------------------
    void SASStatus_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
    {
    internalDataContext = e.NewValue;
    }
    
    dans le CoerceStatusCallback de mon composant je force la valeur au cas ou (justement )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    //-------------------------------------------------------------------------------
    privatestaticobject CoerceStatusCallback(DependencyObject d, object baseValue)
    {
    SASStatus ob = d asSASStatus;
    object c = ob.Status;
    object e = ob.GetValue(SASStatus.StatusProperty);
    Tile f = ob.internalDataContext asTile;
    if(f != null)
    {
    if (!baseValue.Equals(f.TMOverview))
    baseValue = f.TMOverview;
    }
    return baseValue;
    }
    
    et la ca marche mais franchement c'est pas trop top
    kekun a t-il la (une meilleurs) solution de la mort qui tue ?

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/05/2013, 17h34
  2. [MySQL] stocker un texte dans une table et ne l'afficher que lorsque l'on veut
    Par artenis dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 14/04/2012, 13h47
  3. problème bind rmi sur un autre host (que localhost)
    Par cedzed64 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 02/09/2010, 15h50
  4. binding de binding ?
    Par Alec6 dans le forum JSF
    Réponses: 2
    Dernier message: 01/12/2006, 22h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo