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
C#
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>
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
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(); } }
XAML
enfin la class qui est chargé dans mon listbox se présente de la facon suivante :
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>
C#
Seulement voila, j'ai l'erreur suivante au chargement des données dans la ListBox
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() { } }
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
Partager