février
2012
Après un moment sans développer en .NET, je viens de découvrir le pattern MVVM (Model – View – ViewModel) qui est vraiment bien pour décomposer son code. Je ne rentrerai pas dans le détail de ce pattern, pour ça je vous renvoie vers l’excellent livre de Thomas Lebrun et Jonathan Antoine : « MVVM, un pattern pour les gouverner tous » http://www.digitbooks.fr/catalogue/mvvm-antoine-lebrun.html
Qui dis nouvelle méthodologie, dis nouvelle problématiques. La première que j’ai rencontré est avec le composant Treeview et l’impossibilité de binder le SelectedItem.
Concernant l’implémentation du Treeview en mode MVVM, l’article de Josh Smith est particuliérement intéressant : http://www.codeproject.com/Articles/26288/Simplifying-the-WPF-TreeView-by-Using-the-ViewMode
Le code suivant ne compile donc pas :
SelectedItem="{Binding SelectedCategory, Mode=TwoWay}" />
Parmi les solutions existantes pour résoudre ce problème, la plus rapide de mon point de vue et de créer un nouveau composant « ExtendedTreeView » qui hérite du composant Treeview dans lequel on définit une nouvelle propriété SelectedItem_.
Ce qui nous donne :
{
public ExtendedTreeView()
: base()
{
this.SelectedItemChanged += new RoutedPropertyChangedEventHandler<object>(___ICH);
}
void ___ICH(object sender, RoutedPropertyChangedEventArgs<object> e)
{
if (SelectedItem != null)
{
SetValue(SelectedItem_Property, SelectedItem);
}
}
public object SelectedItem_
{
get
{
return (object)GetValue(SelectedItem_Property);
}
set
{
SetValue(SelectedItem_Property, value);
}
}
public static readonly DependencyProperty SelectedItem_Property = DependencyProperty.Register("SelectedItem_", typeof(object), typeof(ExtendedTreeView), new UIPropertyMetadata(null));
}
Il suffit ensuite dans votre code XAML de faire appel à ce nouveau composant :
SelectedItem_="{Binding SelectedCategory, Mode=TwoWay}"
>
ctrl: correspondant à l’espace de nom dans lequel mon composant est déclarer.
Vous voilà donc avec un Treeview pour lequel i lest très facile de récupérer le SelectedItem.
A bientôt pour d’autres astuces !