Bonjour à tous,
Débutant en WPF, je me pose pas de question quant à l'utilisation du binding et ses bonnes pratiques.
J'aurais voulu savoir si ma façon de faire est la bonne.
Prenons le cas d'un formuulaire pour ajouter une personne. On se situe dans un UserControl
Pour les différentes listes j'ai tendance à déclarer une structure (struct) avec mes différentes List<T>.
Dans le constructeur de mon UserControl je récupère mes différentes listes, j'instancis ma structure et je l'assigne au Datacontext.
Code c# : 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 public partial class PersonAdd : System.Windows.Controls.UserControl { public struct StructContext { public List<Sport> FullListSport { get; set; } public List<Loisir> FullListLoisir { get; set; } } ... public PersonAdd() { InitializeComponent(); DataContext = new StructContext{ FullListSport = //Appel à ma BLL FullListLoisir = //Appel à ma BLL }; } }
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2<ComboBox ItemsSource="{Binding Path=FullListSport, Mode=OneWay}" />
Pour la personne que je veux créer deux cas peuvent se produire:
1) La personne n'est utilisée que dans cet UC, je peux donc la rajouter à ma structure
2) J'ai besoin de la binder à ma Windows où à un autre UC alors j'utilise les DependencyProperty
Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 public partial class PersonModel : System.Windows.Controls.UserControl { public PersonModel NewPerson{ get{return (PersonModel) GetValue(NewPersonProperty);} set {SetValue(NewPersonProperty, value);} } public DependencyProperty NewPersonProperty = DependencyProperty.Register("NewPerson",typeof(PersonModel),typeof(PersonModel), new PropertyMetadata(null)) ..... }
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2<TextBox Text="{Binding Path=NewPerson.Name, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" />
Voilà, j'aimerai savoir si c'est une bonne façon de faire ou s'il ya plus simple.
Je trouve l'écriture du RelativeSource={RelativeSource AncestorType={x:Type UserControl}} un peu lourde.
Par avance merci.
Partager