none
Réupérer le contenu d'une propriété par binding RRS feed

  • Question

  • Bonjour,

    Je tente de récupérer le contenu d'une propriété via binding dans un usercontrol. La propriété est une propriété public du usercontrol. Mais impossible de récupérer son contenu.

    Ci-joint une de mes tentatives.

    Merci pour votre aide.

     

    public partial class LienNumeroProjet : UserControl {
     
        public String PourActualite { getset; }
     
        public LienNumeroProjet() {
          PourActualite = "coucou";
          InitializeComponent();
     
        }
    <UserControl x:Class="LienNumeroProjet"
     ...>
    ...   <MenuItem Header={Binding Path=PourActualite, Mode=OneWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"/>
    ...

    TEDFR
    jeudi 7 juillet 2011 13:24

Réponses

  • Oui je viens de m'en rendre compte mais j'arrive à faire le Binding sans le ElementName (je ne sais pas si réellement viens de cela).

    Et à la place dans le Code c# je fais DataContext = This;

     

    Voici le code :

    <Window x:Class="WpfApplication19.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" x:Name="NomFRM">
      <Grid>
        <Label Content="{Binding Path=MaPropriete, Mode=OneWay}" 
            Height="28" HorizontalAlignment="Left" Margin="52,44,0,0" Name="label1" 
            VerticalAlignment="Top" Width="156">
          <Label.ContextMenu>
            <ContextMenu>
              <MenuItem Header="{Binding Path=MaPropriete, Mode=OneWay}"/>
            </ContextMenu>
          </Label.ContextMenu>
        </Label>
      </Grid>
    
    </Window>
    

    public partial class MainWindow : Window
      {
        public String MaPropriete { get; set; }    
    
        public MainWindow()
        {      
          InitializeComponent();
          this.DataContext = this;
          MaPropriete = "Mon titre";
        }
      }
    

     


    Cordialement, Pascal.

    Développeur Wpf/SilverLight/WinPhone7

    • Marqué comme réponse TEDFR vendredi 8 juillet 2011 14:21
    vendredi 8 juillet 2011 13:47
    Modérateur

Toutes les réponses

  • Bonjour,

    j'espère avoir bien compris ta question.

    Et je tenterais plutôt en donnant un nom à mon UserControl et à mettre le code suivant :

    <MenuItem Header="{Binding Path=PourActualite, Mode=OneWay, ElementName=NomUC }"/>
    

     


    Cordialement, Pascal.

    Développeur Wpf/SilverLight/WinPhone7

    jeudi 7 juillet 2011 15:37
    Modérateur
  • Bonjour et merci bien pour ton aide.

    Oui tu as bien compris ma question. J'avais exploré ta solution sans réussite. Il semble que pour un menuitem le binding ne fonctionne pas pareil.

    Voici le code d'un exemple. Le label est bien initialisé par binding, par contre le menu contextuel affiche une ligne vide.

    using System;
    using System.Windows;
     
    namespace testBinding {
      public partial class MainWindow : Window {
        public String MaPropriete { getset; }
        public MainWindow() {
          MaPropriete = "Mon titre";
          InitializeComponent();
        }
      }
    }

     

    <Window x:Class="testBinding.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525"
            Name="NomFRM">
        <Grid>
            <Label Content="{Binding Path=MaPropriete, Mode=OneWay, ElementName=NomFRM }" 
                   Height="28" HorizontalAlignment="Left" Margin="52,44,0,0" Name="label1" 
                   VerticalAlignment="Top" Width="156">
                <Label.ContextMenu>
                    <ContextMenu>
                        <MenuItem Header="{Binding Path=MaPropriete, Mode=OneWay, 
                            ElementName=NomFRM }"/>
                    </ContextMenu>
                </Label.ContextMenu>
            </Label>
        </Grid>
    </Window>
    

    TEDFR
    vendredi 8 juillet 2011 09:48
  • Oui je viens de m'en rendre compte mais j'arrive à faire le Binding sans le ElementName (je ne sais pas si réellement viens de cela).

    Et à la place dans le Code c# je fais DataContext = This;

     

    Voici le code :

    <Window x:Class="WpfApplication19.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" x:Name="NomFRM">
      <Grid>
        <Label Content="{Binding Path=MaPropriete, Mode=OneWay}" 
            Height="28" HorizontalAlignment="Left" Margin="52,44,0,0" Name="label1" 
            VerticalAlignment="Top" Width="156">
          <Label.ContextMenu>
            <ContextMenu>
              <MenuItem Header="{Binding Path=MaPropriete, Mode=OneWay}"/>
            </ContextMenu>
          </Label.ContextMenu>
        </Label>
      </Grid>
    
    </Window>
    

    public partial class MainWindow : Window
      {
        public String MaPropriete { get; set; }    
    
        public MainWindow()
        {      
          InitializeComponent();
          this.DataContext = this;
          MaPropriete = "Mon titre";
        }
      }
    

     


    Cordialement, Pascal.

    Développeur Wpf/SilverLight/WinPhone7

    • Marqué comme réponse TEDFR vendredi 8 juillet 2011 14:21
    vendredi 8 juillet 2011 13:47
    Modérateur
  •  

    Effectivement cela marche à condition d'initialiser le Datacontext et la propriété avant de lancer InitializeComponent().

     

    Bravo et encore une fois merci pour ton aide efficace et rapide.

     

     


    TEDFR
    vendredi 8 juillet 2011 14:21