<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Le bloc de Ginetteguy &#187; WPF</title>
	<atom:link href="https://blog.developpez.com/ginetteguy/pcategory/developpement-windows/wpf/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/ginetteguy</link>
	<description></description>
	<lastBuildDate>Sun, 24 Jul 2011 14:42:56 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>Binder un ContentControl sur un TreeView</title>
		<link>https://blog.developpez.com/ginetteguy/p10150/developpement-windows/binder_un_contentcontrol_sur_un_treeview</link>
		<comments>https://blog.developpez.com/ginetteguy/p10150/developpement-windows/binder_un_contentcontrol_sur_un_treeview#comments</comments>
		<pubDate>Sun, 24 Jul 2011 14:42:56 +0000</pubDate>
		<dc:creator><![CDATA[Ginetteguy]]></dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Developpement Windows]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Ca fait longtemps que j&#8217;ai pas fait d&#8217;article, alors aujourd&#8217;hui petit article sur la façon de binder un ContentControl sur un TreeView. Le but de cet article est d&#8217;élaborer un TreeView contenant des employés, ceux ci étant ordonné selon la hiérarchie de l&#8217;entreprise. using System.Collections.Generic; &#160; namespace TreeViewTest { &#160; &#160; public class Employe &#160; &#160; { &#160; &#160; &#160; &#160; public Employe(string nom,string prenom,Employe chef) &#160; &#160; &#160; &#160; { &#160; &#160; &#160; &#160; [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Ca fait longtemps que j&rsquo;ai pas fait d&rsquo;article, alors aujourd&rsquo;hui petit article sur la façon de binder un ContentControl sur un TreeView.</p>
<p>Le but de cet article est d&rsquo;élaborer un TreeView contenant des employés, ceux ci étant ordonné selon la hiérarchie de l&rsquo;entreprise. </p>
<p><span id="more-2"></span></p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">using System.Collections.Generic; <br />
&nbsp;<br />
namespace TreeViewTest <br />
{ <br />
&nbsp; &nbsp; public class Employe <br />
&nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; public Employe(string nom,string prenom,Employe chef) <br />
&nbsp; &nbsp; &nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _nom = nom; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _prenom = prenom; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _chef = chef; <br />
&nbsp; &nbsp; &nbsp; &nbsp; } <br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; private string _nom; <br />
&nbsp; &nbsp; &nbsp; &nbsp; public string Nom <br />
&nbsp; &nbsp; &nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; get <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return _nom; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _nom = value; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } <br />
&nbsp; &nbsp; &nbsp; &nbsp; } <br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; private string _prenom; <br />
&nbsp; &nbsp; &nbsp; &nbsp; public string Prenom <br />
&nbsp; &nbsp; &nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; get <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return _prenom; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _prenom = value; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } <br />
&nbsp; &nbsp; &nbsp; &nbsp; } <br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; private Employe _chef; <br />
&nbsp; &nbsp; &nbsp; &nbsp; public Employe Chef <br />
&nbsp; &nbsp; &nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; get <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return _chef; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _chef = value; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } <br />
&nbsp; &nbsp; &nbsp; &nbsp; } <br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; private List&lt;Employe&gt; _subAlterne; <br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; public List&lt;Employe&gt; SubAlterne <br />
&nbsp; &nbsp; &nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; get <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (_subAlterne == null) <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _subAlterne = new List&lt;Employe&gt;(); <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return _subAlterne; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _subAlterne = value; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } <br />
&nbsp; &nbsp; &nbsp; &nbsp; } <br />
&nbsp; &nbsp; } <br />
}</div></div>
<p>Ensuite au niveau du code behind de notre MainWindow, affectation des employés.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">using System.Collections.Generic; <br />
using System.Windows; <br />
&nbsp;<br />
namespace TreeViewTest <br />
{ <br />
&nbsp; &nbsp; /// &lt;summary&gt; <br />
&nbsp; &nbsp; /// Logique d'interaction pour MainWindow.xaml <br />
&nbsp; &nbsp; /// &lt;/summary&gt; <br />
&nbsp; &nbsp; public partial class MainWindow : Window <br />
&nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; public static List&lt;Employe&gt; RacineEmploye = new List&lt;Employe&gt;(); <br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; public MainWindow() <br />
&nbsp; &nbsp; &nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; InitializeComponent(); <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //Entité racine <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Employe Racine = new Employe(&quot;Dupont&quot;,&quot;Michel&quot;,null); <br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //Entités SubAlterne <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Employe Sub = new Employe(&quot;Durand&quot;,&quot;Henri&quot;,Racine); <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Employe Sub1 = new Employe(&quot;Toto&quot;,&quot;Toto&quot;,Racine); <br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //Entités SubSubAlterne <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Employe SubSub = new Employe(&quot;Titi&quot;,&quot;Titi&quot;,Sub1); <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Employe SubSub1 = new Employe(&quot;Tata&quot;,&quot;Tata&quot;,Sub1); <br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //Ajout des SubSubAlterne dans la liste <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Sub1.SubAlterne.Add(SubSub); <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Sub1.SubAlterne.Add(SubSub1); <br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //Ajout dans la liste racine <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Racine.SubAlterne.Add(Sub); <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Racine.SubAlterne.Add(Sub1); <br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; RacineEmploye.Add(Racine); <br />
&nbsp; &nbsp; &nbsp; &nbsp; } <br />
&nbsp; &nbsp; } <br />
}</div></div>
<p>Enfin définition du xaml pour afficher correctement tout ceci. Pour le treeView, on effectue le binding sur la liste principale.<br />
Puis utilisation de la propriété HierarchicalDataTemplate en définissant l&rsquo;itemsSource sur la liste des SubAlterne.<br />
Enfin pour afficher le détail d&rsquo;un employé, utilisation d&rsquo;un ContentControl qui se binde sur le SelectedItem du TreeView.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&lt;Window x:Class=&quot;TreeViewTest.MainWindow&quot; <br />
&nbsp; &nbsp; &nbsp; &nbsp; xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot; <br />
&nbsp; &nbsp; &nbsp; &nbsp; xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot; <br />
&nbsp; &nbsp; &nbsp; &nbsp; xmlns:local=&quot;clr-namespace:TreeViewTest&quot; <br />
&nbsp; &nbsp; &nbsp; &nbsp; Title=&quot;MainWindow&quot; Height=&quot;350&quot; Width=&quot;525&quot;&gt; <br />
&nbsp; &nbsp; &lt;Grid&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;Grid.ColumnDefinitions&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;ColumnDefinition Width=&quot;*&quot;/&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;ColumnDefinition Width=&quot;*&quot;/&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;/Grid.ColumnDefinitions&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;TreeView x:Name=&quot;xTreeViewEmploye&quot; ItemsSource=&quot;{x:Static local:MainWindow.RacineEmploye}&quot; Grid.Column=&quot;0&quot;&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;TreeView.ItemTemplate&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;HierarchicalDataTemplate ItemsSource=&quot;{Binding Path=SubAlterne}&quot;&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;TextBlock FontWeight=&quot;Bold&quot; &nbsp;Text=&quot;{Binding Path=Nom}&quot;/&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/HierarchicalDataTemplate&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/TreeView.ItemTemplate&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;/TreeView&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;ContentControl Content=&quot;{Binding ElementName=xTreeViewEmploye, Path=SelectedItem}&quot; Grid.Column=&quot;1&quot;&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;ContentControl.Resources&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;DataTemplate DataType=&quot;{x:Type local:Employe}&quot;&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;StackPanel&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;StackPanel Orientation=&quot;Horizontal&quot; Height=&quot;25&quot;&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;TextBlock Text=&quot;Nom&quot;/&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;TextBox Text=&quot;{Binding Path=Nom}&quot;/&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/StackPanel&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;StackPanel Orientation=&quot;Horizontal&quot; Height=&quot;25&quot;&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;TextBlock Text=&quot;Prenom&quot;/&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;TextBox Text=&quot;{Binding Path=Prenom}&quot;/&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/StackPanel&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;StackPanel Orientation=&quot;Horizontal&quot; Height=&quot;25&quot;&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;TextBlock Text=&quot;Chef&quot;/&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;TextBox Text=&quot;{Binding Path=Chef.Nom}&quot;/&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/StackPanel&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/StackPanel&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/DataTemplate&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/ContentControl.Resources&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;/ContentControl&gt; <br />
&nbsp; &nbsp; &lt;/Grid&gt; <br />
&lt;/Window&gt;</div></div>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
