Bonjour à tous,


Je souhaite créer un composant qui soit un menu, et dans ce menu j'ai des items qui contiennent comme valeurs un champ text, ainsi que le nom d'une classe qui sera chargé dans une frame

J'ai créé un UserControl qui fera office de l'item dans le menu et qui contient 1 TextBox ainsi qu'une propriéte Text

XAML
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
<UserControl x:Class="WPF_Test1.MonUserControl"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WPF_Test1"
             >
  <StackPanel>
    <TextBox x:Name="MaTextBox" />
  </StackPanel>
</UserControl>
C#
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
 
    public partial class MonUserControl : System.Windows.Controls.UserControl
    {
        private string mText;
        public string Text
        {
            get { return this.mText; }
            set { this.mText = value; this.MaTextBox.Text = this.mText; }
        }
 
        public MonUserControl()
        {
            InitializeComponent();
        }
 
    }
dans ma fenetre principale j'ai une liste box qui elle fait office de menu et contien mes Items de type MonUserControl via un Template

XAML
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
  <Window.Resources>
    <DataTemplate x:Key="MenuItemTemplate" DataType="x:Type MonMenuItem">
      <Grid>
        <local:MonUserControl Text="{Binding Path=TextProperty}" />
      </Grid>
    </DataTemplate>
  </Window.Resources>
 
  <Grid x:Name="mainGrid">
    <ListBox ItemsSource="{Binding}" ItemTemplate="{StaticResource MenuItemTemplate}" x:Name="Liste" />
  </Grid>
enfin la class qui est chargé dans mon listbox se présente de la facon suivante :

C#
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
20
21
22
 
    class MonMenuItem: DependencyObject
    {
        public static DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(TilMenuItem));
 
        public MonMenuItem(string inText)
        {
            SetValue(TextProperty, inText);
        }
 
        // Label du lien
        public string Text
        {
            get { return (string)GetValue(TextProperty); }
            set { SetValue(TextProperty, value); }
        }
    }
 
    class MonMenu: ObservableCollection<MonMenuItem>
    {
        public MonMenu() { }
    }
Seulement voila, j'ai l'erreur suivante au chargement des données dans la ListBox

Impossible de définir « Binding » sur la propriété « Text » de type « MonUserControl ». Un « Binding » peut uniquement être défini sur un DependencyProperty d’un DependencyObject.

Comment définir MonUserControl pour qu'il puisse accepter le Binding ?

merci d'avance pour votre aide