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 :

Bind d'une TextBlock d'une usercontrol sur une Dependency property sur RaisePropertyChanged [MVVM]


Sujet :

Windows Presentation Foundation

  1. #1
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut Bind d'une TextBlock d'une usercontrol sur une Dependency property sur RaisePropertyChanged
    Bonjour @ tous,

    Rien à faire, je crois que j'ai tout essayé.
    J'ai un datagrid branché sur un ViewModel, et j'aimerais mettre un bloc de pagination générique dans un userControl.
    Les événements Suivant / précédents fonctionnement bien. Même le [Page N / N] fonctionne bien si je met en dur le nom de l'objet.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <TextBlock Name="txtNumPage" Width="auto" Text="{Binding Users.page, Converter={StaticResource AddConverter}}"/>
    Seulement, c'est là que ça se corse... J'aimerais externaliser le numéro de la page pour ne pas à avoir mettre le nom de l'objet (Users) dans le UserControl.
    J'ai donc mis en place DependencyProperty, Et là, je n'ai que des soucis.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            public static readonly DependencyProperty NumPageProperty = DependencyProperty.Register(nameof(NumPage), typeof(int), typeof(ucPagination), new FrameworkPropertyMetadata(0, NumPagePropertyChangedCallback));
            public int NumPage {
                get { return (int)GetValue(NumPageProperty); }
                set { SetValue(NumPageProperty, value); }
            }
            private static void NumPagePropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e) {
                ((ucPagination)d).NumPage = (int)e.NewValue;
                //MessageBox.Show(e.NewValue.ToString());
            }
    Rien ne s'écrit dans la TextBlock et le point d'arret dans le set n'est relevé qu'une fois, et pas à chaque RaisePropertyChanged.

    Est ce que quelqu'un peut m'apporter ses lumières ?
    David.

  2. #2
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut Binding : Le Converter est sauté si on passe par un DependencyObject
    J'y crois pas... Ca fonctionne si je passe par un PropertyMetadata.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            public static readonly DependencyProperty NumPageProperty = DependencyProperty.Register(nameof(NumPage), typeof(string), typeof(ucPagination), new PropertyMetadata("0", OnTextKeyChanged));
            public string NumPage {
                get { return (string)GetValue(NumPageProperty); }
                set { SetValue(NumPageProperty, value); }
            }
            private static void OnTextKeyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) {
                ((ucPagination)d).txtNumPage.Text = e.NewValue.ToString();
            }
    Par contre, maintenant, il ne passe plus par mon converter alors qu'il le faisait avant.
    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
    16
    17
    18
    19
     
        <UserControl.Resources>
            <local:AddConverter x:Key="AddConverter" />
    ...
    <TextBlock Name="txtNumPage" Width="auto" Text="{Binding Path=NumPage, Converter={StaticResource AddConverter}}"/>
    ...
        public class AddConverter : System.Windows.Data.IValueConverter {
            public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
                int valeur = 0;
                if (int.TryParse(value.ToString(), out valeur)) {
                    return valeur + 1;
                } else return "X";
            }
     
            public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
                return null;
            }
     
        }
    David.

  3. #3
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Bon, j'y ai répondu par un coerc.... J'imagine que c'est un effet automatique de sauter le converteur, puiqu'on le branche sur un outil qui a cette fonctionnalité.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            public static readonly DependencyProperty NumPageProperty = DependencyProperty.Register(nameof(NumPage), typeof(int), typeof(ucPagination), new PropertyMetadata(0, OnTextKeyChanged, CoerceValue));
     
            private static object CoerceValue(DependencyObject d, object baseValue) {
                if (baseValue.GetType() == typeof(int)) {
                    return (int)baseValue + 1;
                } else
                    return 1;
            }
    David.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/09/2007, 15h31
  2. Savoir le temps passé sur une page avant de passer vers une autre page
    Par karimphp dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 04/09/2007, 23h57
  3. Réponses: 1
    Dernier message: 17/05/2007, 10h54
  4. Réponses: 2
    Dernier message: 06/09/2006, 23h20

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