<?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>UNi ... De PHP à .NET &#187; C#</title>
	<atom:link href="https://blog.developpez.com/uni-fr/pcategory/net-3-x-net-4-x/c/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/uni-fr</link>
	<description></description>
	<lastBuildDate>Wed, 07 May 2014 13:59:08 +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>WPF &amp; MVVM &#8211; Astuce n°1 &#8211; TreeView et SelectedItem</title>
		<link>https://blog.developpez.com/uni-fr/p10698/net-3-x-net-4-x/wpf_aamp_mvvm_astuce_nd1_treeview_et_sel</link>
		<comments>https://blog.developpez.com/uni-fr/p10698/net-3-x-net-4-x/wpf_aamp_mvvm_astuce_nd1_treeview_et_sel#comments</comments>
		<pubDate>Mon, 06 Feb 2012 09:54:10 +0000</pubDate>
		<dc:creator><![CDATA[UNi[FR]]]></dc:creator>
				<category><![CDATA[.NET 3.x & .NET 4.x]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[MVVM]]></category>
		<category><![CDATA[WPF]]></category>
		<category><![CDATA[XAML]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Après un moment sans développer en .NET, je viens de découvrir le pattern MVVM (Model &#8211; View &#8211; 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&#8217;excellent livre de Thomas Lebrun et Jonathan Antoine : &#171;&#160;MVVM, un pattern pour les gouverner tous&#160;&#187; http://www.digitbooks.fr/catalogue/mvvm-antoine-lebrun.html Qui dis nouvelle méthodologie, dis nouvelle problématiques. La première que j&#8217;ai rencontré est avec le [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Après un moment sans développer en .NET, je viens de découvrir le pattern MVVM (Model &#8211; View &#8211; 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&rsquo;excellent livre de Thomas Lebrun et Jonathan Antoine : &laquo;&nbsp;MVVM, un pattern pour les gouverner tous&nbsp;&raquo; <a href="http://www.digitbooks.fr/catalogue/mvvm-antoine-lebrun.html">http://www.digitbooks.fr/catalogue/mvvm-antoine-lebrun.html</a></p>
<p>Qui dis nouvelle méthodologie, dis nouvelle problématiques. La première que j&rsquo;ai rencontré est avec le composant Treeview et l&rsquo;impossibilité de binder le SelectedItem.<br />
Concernant l&rsquo;implémentation du Treeview en mode MVVM, l&rsquo;article de Josh Smith est particuliérement intéressant : <a href="http://www.codeproject.com/Articles/26288/Simplifying-the-WPF-TreeView-by-Using-the-ViewMode">http://www.codeproject.com/Articles/26288/Simplifying-the-WPF-TreeView-by-Using-the-ViewMode</a></p>
<p>Le code suivant ne compile donc pas :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&lt;TreeView Grid.Column=&quot;0&quot; ItemsSource=&quot;{Binding CategoryFirstLevel}&quot; &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SelectedItem=&quot;{Binding SelectedCategory, Mode=TwoWay}&quot; /&gt;</div></div>
<p>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 &laquo;&nbsp;ExtendedTreeView&nbsp;&raquo; qui hérite du composant Treeview dans lequel on définit une nouvelle propriété SelectedItem_.</p>
<p>Ce qui nous donne :</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">&nbsp; &nbsp; public class ExtendedTreeView : TreeView <br />
&nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; public ExtendedTreeView() <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : base() <br />
&nbsp; &nbsp; &nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.SelectedItemChanged += new RoutedPropertyChangedEventHandler&lt;object&gt;(___ICH); <br />
&nbsp; &nbsp; &nbsp; &nbsp; } <br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; void ___ICH(object sender, RoutedPropertyChangedEventArgs&lt;object&gt; e) <br />
&nbsp; &nbsp; &nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (SelectedItem != null) <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SetValue(SelectedItem_Property, SelectedItem); <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } <br />
&nbsp; &nbsp; &nbsp; &nbsp; } <br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; public object SelectedItem_ <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 (object)GetValue(SelectedItem_Property); <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; SetValue(SelectedItem_Property, value); <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } <br />
&nbsp; &nbsp; &nbsp; &nbsp; } <br />
&nbsp; &nbsp; &nbsp; &nbsp; public static readonly DependencyProperty SelectedItem_Property = DependencyProperty.Register(&quot;SelectedItem_&quot;, typeof(object), typeof(ExtendedTreeView), new UIPropertyMetadata(null)); <br />
&nbsp; &nbsp; }</div></div>
<p>Il suffit ensuite dans votre code XAML de faire appel à ce nouveau composant :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&lt;ctrl:ExtendedTreeView Grid.Column=&quot;0&quot; ItemsSource=&quot;{Binding CategoryFirstLevel}&quot; &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SelectedItem_=&quot;{Binding SelectedCategory, Mode=TwoWay}&quot; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&gt;</div></div>
<p><strong>ctrl:</strong> correspondant à l&rsquo;espace de nom dans lequel mon composant est déclarer.</p>
<p>Vous voilà donc avec un Treeview pour lequel i lest très facile de récupérer le SelectedItem.</p>
<p>A bientôt pour d&rsquo;autres astuces !</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[LINQ] INNER JOIN avec  LINQ</title>
		<link>https://blog.developpez.com/uni-fr/p5857/net-3-x-net-4-x/linq_exemple_de_jointure_avec_linq</link>
		<comments>https://blog.developpez.com/uni-fr/p5857/net-3-x-net-4-x/linq_exemple_de_jointure_avec_linq#comments</comments>
		<pubDate>Mon, 09 Jun 2008 10:57:25 +0000</pubDate>
		<dc:creator><![CDATA[UNi[FR]]]></dc:creator>
				<category><![CDATA[.NET 3.x & .NET 4.x]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[LINQ]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Voici un petit exemple qui montre comment utiliser les jointures avec LINQ var query = &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; from tbl1 in db.matable1 &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; join tbl2 in db.matable2 on tbl1.id equals tbl2.id_tbl1 &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; select tbl1;]]></description>
				<content:encoded><![CDATA[<p>Voici un petit exemple qui montre comment utiliser les jointures avec LINQ</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">var query = &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; from tbl1 in db.matable1 <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; join tbl2 in db.matable2 on tbl1.id equals tbl2.id_tbl1 <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; select tbl1;</div></div>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[LINQ] DataContext &amp;&amp; Update</title>
		<link>https://blog.developpez.com/uni-fr/p6114/net-3-x-net-4-x/linq_les_connexions</link>
		<comments>https://blog.developpez.com/uni-fr/p6114/net-3-x-net-4-x/linq_les_connexions#comments</comments>
		<pubDate>Thu, 24 Jul 2008 10:19:09 +0000</pubDate>
		<dc:creator><![CDATA[UNi[FR]]]></dc:creator>
				<category><![CDATA[.NET 3.x & .NET 4.x]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[LINQ]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[J&#8217;ai remarqué une chose qu&#8217;il est bon de noté dans un coin. Lorsque l&#8217;on veut faire un update d&#8217;un objet, il est impératif de faire l&#8217;update avec le datacontext qui s&#8217;est occupé de récupérer l&#8217;objet. Je m&#8217;explique&#8230; je me suis créé une fonction qui permet de récupérer un objet selon son ID public class Utils &#160; { &#160; &#160; &#160; &#160; public static monobjet getMonObjet(int inId) &#160; &#160; &#160; &#160; { &#160; &#160; &#160; &#160; [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>J&rsquo;ai remarqué une chose qu&rsquo;il est bon de noté dans un coin.</p>
<p>Lorsque l&rsquo;on veut faire un update d&rsquo;un objet, il est impératif de faire l&rsquo;update avec le datacontext qui s&rsquo;est occupé de récupérer l&rsquo;objet.</p>
<p>Je m&rsquo;explique&#8230;</p>
<p><span id="more-3"></span></p>
<p>je me suis créé une fonction qui permet de récupérer un objet selon son ID</p>
<pre>

<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">public class Utils &nbsp;<br />
{ <br />
&nbsp; &nbsp; &nbsp; &nbsp; public static monobjet getMonObjet(int inId) <br />
&nbsp; &nbsp; &nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (Utils.m_db == null) <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Utils.m_db = new DataClasses1DataContext(&quot;ma_chaine_de_connexion&quot;); <br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var _result = <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ( <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; from tbl in Utils.m_db.matable <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; where tbl.id == inId <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; select tbl <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ).ToList(); <br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (_result.Count &gt; 0) <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return _result[0]; <br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return null; <br />
&nbsp; &nbsp; &nbsp; &nbsp; } <br />
}</div></div>

</pre>
<p>une fois l&rsquo;objet récupérer, j&rsquo;effectue des modifications</p>
<pre>

<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var _strConn = &quot;ma_chaine_de_connexion&quot;; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var db = new DataClasses1DataContext(_strConn); <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db.Log = Console.Out; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var _obj = Utils.getMonObjet(_id); <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _r.ordre = inOrder; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db.SubmitChanges();</div></div>

</pre>
<p>et bien celà ne fonctionne pas pour la simple et bonne raison que le DataContext qui à récupérer l&rsquo;objet n&rsquo;est pas le même que celui qui fait l&rsquo;update !</p>
<p>ce qui me donne pour la fonction static</p>
<pre>

<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">public class Utils &nbsp;<br />
{ <br />
&nbsp; &nbsp; &nbsp; &nbsp; public static monobjet getMonObjet(DataContext inContext, int inId) <br />
&nbsp; &nbsp; &nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var _result = <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ( <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; from tbl in inContext.matable <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; where tbl.id == inId <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; select tbl <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ).ToList(); <br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (_result.Count &gt; 0) <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return _result[0]; <br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return null; <br />
&nbsp; &nbsp; &nbsp; &nbsp; } <br />
}</div></div>

</pre>
<p>et pour mon code d&rsquo;appelle</p>
<pre>

<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var _strConn = &quot;ma_chaine_de_connexion&quot;; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var db = new DataClasses1DataContext(_strConn); <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db.Log = Console.Out; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var _obj = Utils.getMonObjet(db, _id); <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _r.ordre = inOrder; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db.SubmitChanges();</div></div>

</pre>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[ASP.net] Créer des UserControl en code-behind</title>
		<link>https://blog.developpez.com/uni-fr/p5814/net-3-x-net-4-x/asp_net_creer_des_usercontrol_en_code_be</link>
		<comments>https://blog.developpez.com/uni-fr/p5814/net-3-x-net-4-x/asp_net_creer_des_usercontrol_en_code_be#comments</comments>
		<pubDate>Tue, 03 Jun 2008 08:16:26 +0000</pubDate>
		<dc:creator><![CDATA[UNi[FR]]]></dc:creator>
				<category><![CDATA[.NET 3.x & .NET 4.x]]></category>
		<category><![CDATA[ASP.net]]></category>
		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Voilà une petite astuce qui explique comment créer des UserControl à la volée. &#160; &#160; &#160;MonUserControl _temp = LoadControl(&#34;/chemin/vers/MonUserControl.ascx&#34;) as MonUserControl; &#160; &#160; &#160;this.Controls.add(_temp);]]></description>
				<content:encoded><![CDATA[<p>Voilà une petite astuce qui explique comment créer des UserControl à la volée.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; &nbsp;MonUserControl _temp = LoadControl(&quot;/chemin/vers/MonUserControl.ascx&quot;) as MonUserControl; <br />
&nbsp; &nbsp; &nbsp;this.Controls.add(_temp);</div></div>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C# 3.x &#8211; Sélectionner un élémént dans une TreeView</title>
		<link>https://blog.developpez.com/uni-fr/p5119/net-3-x-net-4-x/c_3_x_selectionner_un_element_dans_une_t</link>
		<comments>https://blog.developpez.com/uni-fr/p5119/net-3-x-net-4-x/c_3_x_selectionner_un_element_dans_une_t#comments</comments>
		<pubDate>Mon, 18 Feb 2008 10:03:06 +0000</pubDate>
		<dc:creator><![CDATA[UNi[FR]]]></dc:creator>
				<category><![CDATA[.NET 3.x & .NET 4.x]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Voilà une petite fonction qui va permettre de sélectionner un élément dans une TreeView selon le contenu de sa propriété Tag &#160; &#160; &#160; &#160; // On explore le TreeView pour voir si on &#160; &#160; &#160; &#160; &#160; sélectionne un élément &#160; &#160; &#160; &#160; public bool readTreeViewItem(TreeView inTV, object inObj) &#160; &#160; &#160; &#160; { &#160; &#160; &#160; &#160; &#160; &#160; &#160; TreeViewItem inTVI; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; for [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Voilà une petite fonction qui va permettre de sélectionner un élément dans une TreeView selon le contenu de sa propriété Tag</p>
<pre>

<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">&nbsp; &nbsp; &nbsp; &nbsp; // On explore le TreeView pour voir si on &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; sélectionne un élément <br />
&nbsp; &nbsp; &nbsp; &nbsp; public bool readTreeViewItem(TreeView inTV, object inObj) <br />
&nbsp; &nbsp; &nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TreeViewItem inTVI; &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (int i = 0; i &lt; inTV.Items.Count; i++) &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; { &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;var _r = readTreeViewItem(inTV.Items[i] as TreeViewItem, inObj); &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (_r) return _r; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return false; <br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; } &nbsp;<br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; // On explore le TreeViewItem pour voir si on &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; sélectionne un élément (fonction récursive) <br />
&nbsp; &nbsp; &nbsp; &nbsp; private bool readTreeViewItem(TreeViewItem inTVI, object inId) <br />
&nbsp; &nbsp; &nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (inTVI.Tag.ToString() == inId.ToString()) <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; inTVI.IsSelected = true; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return true; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (inTVI.Items.Count &gt; 0) <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (int i = 0; i &lt; inTVI.Items.Count; i++) <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bool _b = readTreeViewItem((inTVI.Items[i] as TreeViewItem), &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; inId); <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (_b) <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return true; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } <br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return false; <br />
&nbsp; &nbsp; &nbsp; &nbsp; }</div></div>

</pre>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WPF &#8211; Astuce n°2 &#8211; Déclarer et utiliser un delegate C#</title>
		<link>https://blog.developpez.com/uni-fr/p4827/net-3-x-net-4-x/wpf_astuce_nd2_declarer_et_utiliser_un_d</link>
		<comments>https://blog.developpez.com/uni-fr/p4827/net-3-x-net-4-x/wpf_astuce_nd2_declarer_et_utiliser_un_d#comments</comments>
		<pubDate>Mon, 21 Jan 2008 09:05:05 +0000</pubDate>
		<dc:creator><![CDATA[UNi[FR]]]></dc:creator>
				<category><![CDATA[.NET 3.x & .NET 4.x]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Voici un petit exemple de déclaration et utilisation d&#8217;un delegate en WPF (.NET 3.x) &#160; &#160; &#160; &#160; // Ici on déclare le delegate &#160; &#160; &#160; &#160; public delegate void mondelegate(); &#160; &#160; &#160; &#160; &#160; // Ici on cré la fonction qui sera associé à mon delegate &#160; &#160; &#160; &#160; public void fonction_associe_au_delegate() &#160; &#160; &#160; &#160; { &#160; &#160; &#160; &#160; &#160; &#160; &#160;// ... je place ici mon code qui [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Voici un petit exemple de déclaration et utilisation d&rsquo;un delegate en WPF (.NET 3.x)</p>
<pre>

<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; &nbsp; &nbsp; // Ici on déclare le delegate <br />
&nbsp; &nbsp; &nbsp; &nbsp; public delegate void mondelegate(); <br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; // Ici on cré la fonction qui sera associé à mon delegate <br />
&nbsp; &nbsp; &nbsp; &nbsp; public void fonction_associe_au_delegate() <br />
&nbsp; &nbsp; &nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// ... je place ici mon code qui accéde au composants ... <br />
&nbsp; &nbsp; &nbsp; &nbsp; } <br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; // La fonction qui va lancer le delegate <br />
&nbsp; &nbsp; &nbsp; &nbsp; public void mafonction() <br />
&nbsp; &nbsp; &nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.Dispatcher.Invoke( <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.Windows.Threading.DispatcherPriority.Normal, &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new mondelegate(fonction_associe_au_delegate) <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;); <br />
&nbsp; &nbsp; &nbsp; &nbsp; }</div></div>

</pre>
<p>Le bouton étant d&rsquo;appeller mafonction() dans un thread <img src="https://blog.developpez.com/uni-fr/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[C#] Déplier complétement (expand all) un TreeView en .Net 3.x</title>
		<link>https://blog.developpez.com/uni-fr/p4564/net-3-x-net-4-x/c_deplier_completement_expand_all_un_tre</link>
		<comments>https://blog.developpez.com/uni-fr/p4564/net-3-x-net-4-x/c_deplier_completement_expand_all_un_tre#comments</comments>
		<pubDate>Thu, 22 Nov 2007 13:24:20 +0000</pubDate>
		<dc:creator><![CDATA[UNi[FR]]]></dc:creator>
				<category><![CDATA[.NET 3.x & .NET 4.x]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Voilà une petite fonction bien pratique qui permet de déplier tout les noeuds d&#8217;un TreeView &#160; &#160; &#160; &#160; public void expandAll(TreeView inTV) &#160; &#160; &#160; &#160; { &#160; &#160; &#160; &#160; &#160; &#160; &#160; TreeViewItem inTVI; &#160; &#160; &#160; &#160; &#160; &#160; &#160; for (int i = 0; i &#60; inTV.Items.Count; i++) &#160; &#160; &#160; &#160; &#160; &#160; &#160; { &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;nTVI = TreeViewItem inTVI = [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Voilà une petite fonction bien pratique qui permet de déplier tout les noeuds d&rsquo;un TreeView</p>
<pre>

<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">&nbsp; &nbsp; &nbsp; &nbsp; public void expandAll(TreeView inTV) <br />
&nbsp; &nbsp; &nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TreeViewItem inTVI; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (int i = 0; i &lt; inTV.Items.Count; i++) <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;nTVI = TreeViewItem inTVI = inTV.Items[i] as TreeViewItem; &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;expandTreeViewItem((inTVI.Items[i] as TreeViewItem)); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } <br />
&nbsp; &nbsp; &nbsp; &nbsp; } <br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; private void expandTreeViewItem(TreeViewItem inTVI) <br />
&nbsp; &nbsp; &nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; inTVI.IsExpand = true; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (inTVI.Items.Count &gt; 0) <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (int i = 0; i &lt; inTVI.Items.Count; i++) <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; expandTreeViewItem((inTVI.Items[i] as TreeViewItem)); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } <br />
&nbsp; &nbsp; &nbsp; &nbsp; }</div></div>

</pre>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
