Derniers messages sur Zeste de Savoirhttps://zestedesavoir.com/forums/2015-04-19T23:48:31+02:00Les derniers messages parus sur le forum de Zeste de Savoir.Problématique pour adapter un bandeau défilant en WPF, message #524962015-04-19T23:48:31+02:00mrflamby/@mrflambyhttps://zestedesavoir.com/forums/sujet/2906/problematique-pour-adapter-un-bandeau-defilant-en-wpf/?page=1#p52496<p>J'ai tenté cette nouvelle approche. Dans mon Timer, lorsque celui ci Tick, j'ouvre une window</p>
<table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre>1
2</pre></div></td><td class="code"><div class="codehilite"><pre><span class="n">TickerView</span> <span class="n">view</span> <span class="p">=</span> <span class="k">new</span> <span class="n">TickerView</span><span class="p">();</span>
<span class="n">view</span><span class="p">.</span><span class="n">Show</span><span class="p">();</span>
</pre></div>
</td></tr></table>
<p>Le ViewModel de mon Ticker</p>
<table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35</pre></div></td><td class="code"><div class="codehilite"><pre> <span class="k">public</span> <span class="k">class</span> <span class="nc">TickerViewModel</span> <span class="p">:</span> <span class="n">ViewModelBase</span>
<span class="p">{</span>
<span class="k">private</span> <span class="n">Ticker</span><span class="p"><</span><span class="n">TickerNormalView</span><span class="p">></span> <span class="n">ticker</span><span class="p">;</span>
<span class="k">private</span> <span class="k">readonly</span> <span class="n">FeedManager</span> <span class="n">manager</span> <span class="p">=</span> <span class="k">new</span> <span class="n">FeedManager</span><span class="p">();</span>
<span class="k">private</span> <span class="k">readonly</span> <span class="n">IDataService</span> <span class="n">_dataService</span><span class="p">;</span>
<span class="k">public</span> <span class="n">RelayCommand</span> <span class="n">TickeViewLoaded</span> <span class="p">{</span> <span class="k">get</span><span class="p">;</span> <span class="k">private</span> <span class="k">set</span><span class="p">;</span> <span class="p">}</span>
<span class="k">public</span> <span class="n">RelayCommand</span> <span class="n">TickerItemLoaded</span> <span class="p">{</span> <span class="k">get</span><span class="p">;</span> <span class="k">private</span> <span class="k">set</span><span class="p">;</span> <span class="p">}</span>
<span class="k">private</span> <span class="k">void</span> <span class="nf">OnItemLoaded</span><span class="p">()</span>
<span class="p">{</span>
<span class="n">MessageBox</span><span class="p">.</span><span class="n">Show</span><span class="p">(</span><span class="s">"TickerItem chargé !"</span><span class="p">);</span>
<span class="p">}</span>
<span class="k">private</span> <span class="k">void</span> <span class="nf">OnTickerLoaded</span><span class="p">()</span>
<span class="p">{</span>
<span class="n">MessageBox</span><span class="p">.</span><span class="n">Show</span><span class="p">(</span><span class="s">"TickerView chargé !"</span><span class="p">);</span>
<span class="n">ticker</span> <span class="p">=</span> <span class="k">new</span> <span class="n">Ticker</span><span class="p"><</span><span class="n">TickerNormalView</span><span class="p">>(</span><span class="k">new</span> <span class="n">TickerLayout</span><span class="p">().</span><span class="n">LayoutRoot</span><span class="p">);</span>
<span class="n">ticker</span><span class="p">.</span><span class="n">Speed</span> <span class="p">=</span> <span class="k">new</span> <span class="n">TimeSpan</span><span class="p">(</span><span class="m">0</span><span class="p">,</span> <span class="m">1</span><span class="p">,</span> <span class="m">0</span><span class="p">);</span>
<span class="n">manager</span><span class="p">.</span><span class="n">Start</span><span class="p">();</span>
<span class="n">ticker</span><span class="p">.</span><span class="n">Start</span><span class="p">();</span>
<span class="p">}</span>
<span class="k">private</span> <span class="k">void</span> <span class="nf">AddItem</span><span class="p">(</span><span class="n">FeedItem</span> <span class="n">itm</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">ticker</span><span class="p">.</span><span class="n">Items</span><span class="p">.</span><span class="n">Enqueue</span><span class="p">(</span><span class="k">new</span> <span class="n">TickerNormalView</span><span class="p">(</span><span class="n">itm</span><span class="p">));</span>
<span class="p">}</span>
<span class="k">public</span> <span class="nf">TickerViewModel</span><span class="p">(</span><span class="n">IDataService</span> <span class="n">dataService</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">_dataService</span> <span class="p">=</span> <span class="n">dataService</span><span class="p">;</span>
<span class="n">manager</span><span class="p">.</span><span class="n">NewFeedItem</span> <span class="p">+=</span> <span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="n">e</span><span class="p">)</span> <span class="p">=></span> <span class="n">Execute</span><span class="p">.</span><span class="n">BeginOnUIThread</span><span class="p">(()</span> <span class="p">=></span> <span class="n">AddItem</span><span class="p">(</span><span class="n">e</span><span class="p">.</span><span class="n">Item</span><span class="p">));</span>
<span class="n">TickeViewLoaded</span> <span class="p">=</span> <span class="k">new</span> <span class="n">RelayCommand</span><span class="p">(()</span> <span class="p">=></span> <span class="n">OnTickerLoaded</span><span class="p">());</span>
<span class="n">TickerItemLoaded</span> <span class="p">=</span> <span class="k">new</span> <span class="n">RelayCommand</span><span class="p">(()</span> <span class="p">=></span> <span class="n">OnItemLoaded</span><span class="p">());</span>
<span class="p">}</span>
<span class="p">}</span>
</pre></div>
</td></tr></table>
<p>J'ai donc deux messages qui doivent apparaître : le premier lorsque la window s'ouvre et celui ci fonctionne, et le deuxième lorsque la vue TickerNormalView fait défiler le texte. Or cette vue ne se charge pas. </p>
<p>Voici la classe du Ticker de l'appli originelle.</p>
<table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101</pre></div></td><td class="code"><div class="codehilite"><pre> <span class="k">public</span> <span class="k">class</span> <span class="nc">Ticker</span><span class="p"><</span><span class="n">T</span><span class="p">></span> <span class="k">where</span> <span class="n">T</span> <span class="p">:</span> <span class="n">FrameworkElement</span>
<span class="p">{</span>
<span class="k">private</span> <span class="k">readonly</span> <span class="n">DispatcherTimer</span> <span class="n">displayTimer</span> <span class="p">=</span> <span class="k">new</span> <span class="n">DispatcherTimer</span><span class="p">();</span>
<span class="k">public</span> <span class="n">EventHandler</span><span class="p"><</span><span class="n">ItemEventArgs</span><span class="p"><</span><span class="n">T</span><span class="p">>></span> <span class="n">ItemDisplayed</span><span class="p">;</span>
<span class="k">public</span> <span class="kt">bool</span> <span class="n">IsRunning</span> <span class="p">{</span> <span class="k">get</span><span class="p">;</span> <span class="k">set</span><span class="p">;</span> <span class="p">}</span>
<span class="k">public</span> <span class="k">void</span> <span class="nf">Stop</span><span class="p">()</span>
<span class="p">{</span>
<span class="n">displayTimer</span><span class="p">.</span><span class="n">Stop</span><span class="p">();</span>
<span class="n">IsRunning</span> <span class="p">=</span> <span class="k">false</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">public</span> <span class="k">void</span> <span class="nf">Start</span><span class="p">()</span>
<span class="p">{</span>
<span class="n">displayTimer</span><span class="p">.</span><span class="n">Start</span><span class="p">();</span>
<span class="n">displayTimer</span><span class="p">.</span><span class="n">Interval</span> <span class="p">=</span> <span class="k">new</span> <span class="n">TimeSpan</span><span class="p">(</span><span class="m">0</span><span class="p">,</span> <span class="m">0</span><span class="p">,</span> <span class="m">0</span><span class="p">,</span> <span class="m">1</span><span class="p">);</span>
<span class="n">IsRunning</span> <span class="p">=</span> <span class="k">true</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">public</span> <span class="nf">Ticker</span><span class="p">(</span><span class="n">Panel</span> <span class="n">container</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">SeperatorSize</span> <span class="p">=</span> <span class="m">25</span><span class="p">;</span>
<span class="n">Container</span> <span class="p">=</span> <span class="n">container</span><span class="p">;</span>
<span class="n">Container</span><span class="p">.</span><span class="n">Measure</span><span class="p">(</span><span class="k">new</span> <span class="n">Size</span><span class="p">(</span><span class="n">Double</span><span class="p">.</span><span class="n">PositiveInfinity</span><span class="p">,</span> <span class="n">Double</span><span class="p">.</span><span class="n">PositiveInfinity</span><span class="p">));</span>
<span class="n">Container</span><span class="p">.</span><span class="n">Arrange</span><span class="p">(</span><span class="k">new</span> <span class="n">Rect</span><span class="p">(</span><span class="n">Container</span><span class="p">.</span><span class="n">DesiredSize</span><span class="p">));</span>
<span class="n">Speed</span> <span class="p">=</span> <span class="k">new</span> <span class="n">TimeSpan</span><span class="p">(</span><span class="m">0</span><span class="p">,</span> <span class="m">0</span><span class="p">,</span> <span class="m">0</span><span class="p">,</span> <span class="m">40</span><span class="p">);</span>
<span class="n">Items</span> <span class="p">=</span> <span class="k">new</span> <span class="n">Queue</span><span class="p"><</span><span class="n">T</span><span class="p">>();</span>
<span class="n">displayTimer</span><span class="p">.</span><span class="n">Tick</span> <span class="p">+=</span> <span class="n">displayTimer_Tick</span><span class="p">;</span>
<span class="n">displayTimer</span><span class="p">.</span><span class="n">Start</span><span class="p">();</span>
<span class="n">IsRunning</span> <span class="p">=</span> <span class="k">true</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">public</span> <span class="kt">double</span> <span class="n">SeperatorSize</span> <span class="p">{</span> <span class="k">get</span><span class="p">;</span> <span class="k">set</span><span class="p">;</span> <span class="p">}</span>
<span class="k">public</span> <span class="n">TimeSpan</span> <span class="n">Speed</span> <span class="p">{</span> <span class="k">get</span><span class="p">;</span> <span class="k">set</span><span class="p">;</span> <span class="p">}</span>
<span class="k">public</span> <span class="n">Queue</span><span class="p"><</span><span class="n">T</span><span class="p">></span> <span class="n">Items</span> <span class="p">{</span> <span class="k">get</span><span class="p">;</span> <span class="k">set</span><span class="p">;</span> <span class="p">}</span>
<span class="k">public</span> <span class="n">Panel</span> <span class="n">Container</span> <span class="p">{</span> <span class="k">get</span><span class="p">;</span> <span class="k">private</span> <span class="k">set</span><span class="p">;</span> <span class="p">}</span>
<span class="k">private</span> <span class="k">void</span> <span class="nf">displayTimer_Tick</span><span class="p">(</span><span class="kt">object</span> <span class="n">sender</span><span class="p">,</span> <span class="n">EventArgs</span> <span class="n">e</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">DisplayNextItem</span><span class="p">();</span>
<span class="p">}</span>
<span class="k">private</span> <span class="k">void</span> <span class="nf">DisplayNextItem</span><span class="p">()</span>
<span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="n">Items</span><span class="p">.</span><span class="n">Count</span> <span class="p">==</span> <span class="m">0</span><span class="p">)</span> <span class="k">return</span><span class="p">;</span>
<span class="n">T</span> <span class="n">item</span> <span class="p">=</span> <span class="n">Items</span><span class="p">.</span><span class="n">Dequeue</span><span class="p">();</span>
<span class="n">Container</span><span class="p">.</span><span class="n">Children</span><span class="p">.</span><span class="n">Add</span><span class="p">(</span><span class="n">item</span><span class="p">);</span>
<span class="n">AnimateMove</span><span class="p">(</span><span class="n">item</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">ItemDisplayed</span> <span class="p">!=</span> <span class="k">null</span><span class="p">)</span> <span class="n">ItemDisplayed</span><span class="p">(</span><span class="k">this</span><span class="p">,</span> <span class="k">new</span> <span class="n">ItemEventArgs</span><span class="p"><</span><span class="n">T</span><span class="p">>(</span><span class="n">item</span><span class="p">));</span>
<span class="p">}</span>
<span class="k">private</span> <span class="k">void</span> <span class="nf">AnimateMove</span><span class="p">(</span><span class="n">FrameworkElement</span> <span class="n">e</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">e</span><span class="p">.</span><span class="n">Measure</span><span class="p">(</span><span class="k">new</span> <span class="n">Size</span><span class="p">(</span><span class="n">Double</span><span class="p">.</span><span class="n">PositiveInfinity</span><span class="p">,</span> <span class="n">Double</span><span class="p">.</span><span class="n">PositiveInfinity</span><span class="p">));</span>
<span class="n">e</span><span class="p">.</span><span class="n">Arrange</span><span class="p">(</span><span class="k">new</span> <span class="n">Rect</span><span class="p">(</span><span class="n">e</span><span class="p">.</span><span class="n">DesiredSize</span><span class="p">));</span>
<span class="kt">double</span> <span class="k">from</span> <span class="p">=</span> <span class="n">Container</span><span class="p">.</span><span class="n">ActualWidth</span><span class="p">;</span>
<span class="kt">double</span> <span class="n">to</span> <span class="p">=</span> <span class="p">-</span><span class="m">500</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">unitsPerSec</span> <span class="p">=</span> <span class="n">Convert</span><span class="p">.</span><span class="n">ToInt32</span><span class="p">(</span><span class="n">Math</span><span class="p">.</span><span class="n">Abs</span><span class="p">(</span><span class="k">from</span> <span class="p">-</span> <span class="n">to</span><span class="p">)</span> <span class="p">/</span> <span class="n">Speed</span><span class="p">.</span><span class="n">TotalSeconds</span><span class="p">);</span>
<span class="kt">int</span> <span class="n">nextFire</span> <span class="p">=</span> <span class="n">Convert</span><span class="p">.</span><span class="n">ToInt32</span><span class="p">((</span><span class="n">e</span><span class="p">.</span><span class="n">ActualWidth</span> <span class="p">+</span> <span class="n">SeperatorSize</span><span class="p">)</span> <span class="p">/</span> <span class="n">unitsPerSec</span><span class="p">);</span>
<span class="n">displayTimer</span><span class="p">.</span><span class="n">Stop</span><span class="p">();</span>
<span class="n">displayTimer</span><span class="p">.</span><span class="n">Interval</span> <span class="p">=</span> <span class="k">new</span> <span class="n">TimeSpan</span><span class="p">(</span><span class="m">0</span><span class="p">,</span> <span class="m">0</span><span class="p">,</span> <span class="n">nextFire</span><span class="p">);</span>
<span class="n">displayTimer</span><span class="p">.</span><span class="n">Start</span><span class="p">();</span>
<span class="n">TaggedDoubleAnimation</span> <span class="n">ani</span> <span class="p">=</span> <span class="k">new</span> <span class="n">TaggedDoubleAnimation</span><span class="p">();</span>
<span class="n">ani</span><span class="p">.</span><span class="n">From</span> <span class="p">=</span> <span class="k">from</span><span class="p">;</span>
<span class="n">ani</span><span class="p">.</span><span class="n">To</span> <span class="p">=</span> <span class="n">to</span><span class="p">;</span>
<span class="n">ani</span><span class="p">.</span><span class="n">Duration</span> <span class="p">=</span> <span class="k">new</span> <span class="n">Duration</span><span class="p">(</span><span class="n">Speed</span><span class="p">);</span>
<span class="n">ani</span><span class="p">.</span><span class="n">TargetElement</span> <span class="p">=</span> <span class="n">e</span><span class="p">;</span>
<span class="n">ani</span><span class="p">.</span><span class="n">Completed</span> <span class="p">+=</span> <span class="n">ani_Completed</span><span class="p">;</span>
<span class="n">TranslateTransform</span> <span class="n">trans</span> <span class="p">=</span> <span class="k">new</span> <span class="n">TranslateTransform</span><span class="p">();</span>
<span class="n">e</span><span class="p">.</span><span class="n">RenderTransform</span> <span class="p">=</span> <span class="n">trans</span><span class="p">;</span>
<span class="n">trans</span><span class="p">.</span><span class="n">BeginAnimation</span><span class="p">(</span><span class="n">TranslateTransform</span><span class="p">.</span><span class="n">XProperty</span><span class="p">,</span> <span class="n">ani</span><span class="p">,</span> <span class="n">HandoffBehavior</span><span class="p">.</span><span class="n">Compose</span><span class="p">);</span>
<span class="p">}</span>
<span class="k">private</span> <span class="k">void</span> <span class="nf">ani_Completed</span><span class="p">(</span><span class="kt">object</span> <span class="n">sender</span><span class="p">,</span> <span class="n">EventArgs</span> <span class="n">e</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">Clock</span> <span class="n">clock</span> <span class="p">=</span> <span class="p">(</span><span class="n">Clock</span><span class="p">)</span><span class="n">sender</span><span class="p">;</span>
<span class="n">TaggedDoubleAnimation</span> <span class="n">ani</span> <span class="p">=</span> <span class="p">(</span><span class="n">TaggedDoubleAnimation</span><span class="p">)</span><span class="n">clock</span><span class="p">.</span><span class="n">Timeline</span><span class="p">;</span>
<span class="n">FrameworkElement</span> <span class="n">element</span> <span class="p">=</span> <span class="n">ani</span><span class="p">.</span><span class="n">TargetElement</span><span class="p">;</span>
<span class="n">Container</span><span class="p">.</span><span class="n">Children</span><span class="p">.</span><span class="n">Remove</span><span class="p">(</span><span class="n">element</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">}</span>
</pre></div>
</td></tr></table>
<p>Je serais très heureux de pouvoir comprendre cette mécanique !</p>Problématique pour adapter un bandeau défilant en WPF, message #523872015-04-19T00:34:45+02:00mrflamby/@mrflambyhttps://zestedesavoir.com/forums/sujet/2906/problematique-pour-adapter-un-bandeau-defilant-en-wpf/?page=1#p52387<p>Bonsoir !
J'ai hérité d'un projet plutôt complexe, celui de reproduire une application de type "DeskAlert" : écrire un message dans une interface web en définissant des critères (importance, destinataires…), pour qu'un terminal client affiche celui ci sous la forme choisie (popup ou bandeau défilant). Cette situation est d'autant plus complexe que je suis encore novice et que je n'ai pas de référent en dev sur ce projet (pas d'aide directe). Et en bonus pas de web sur mon poste de dev (rigolo quand l'extension est uniquement sous nuget). Malgré tout, je touche presque au but, en ayant développé un Webapp Mvc, un service WCF, une base SQL et un terminal WPF (environnement .NET donc).</p>
<p>Il y a une mécanique ou je suis réellement en difficulté. C'est de la gestion de la vue du bandeau défilant avec le terminal WPF. Je tente d'adapter une partie de ce projet : <a href="http://www.jarloo.com/rumormill4/">Ticker WPF</a> pour qu'il puisse me lire mes données directement de mon service WCF plutôt que d'un flux RSS. Ce projet fonctionne avec le Framework Caliburn Micro, et je tente de l'adapter pour MVVM light, le framework que j'utilise.</p>
<p>Voici un extrait du ViewModel initial :</p>
<table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16</pre></div></td><td class="code"><div class="codehilite"><pre><span class="na"> [ImportingConstructor]</span>
<span class="k">public</span> <span class="nf">MainViewModel</span><span class="p">()</span>
<span class="p">{</span>
<span class="n">manager</span><span class="p">.</span><span class="n">NewFeedItem</span> <span class="p">+=</span> <span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="n">e</span><span class="p">)</span> <span class="p">=></span> <span class="n">Execute</span><span class="p">.</span><span class="n">BeginOnUIThread</span><span class="p">(()</span> <span class="p">=></span> <span class="n">AddItem</span><span class="p">(</span><span class="n">e</span><span class="p">.</span><span class="n">Item</span><span class="p">));</span>
<span class="n">DTimer</span> <span class="n">dtimer</span> <span class="p">=</span> <span class="k">new</span> <span class="n">DTimer</span><span class="p">();</span>
<span class="n">dtimer</span><span class="p">.</span><span class="n">Start</span><span class="p">(</span><span class="m">10</span><span class="p">);</span>
<span class="p">}</span>
<span class="k">protected</span> <span class="k">override</span> <span class="k">void</span> <span class="nf">OnViewLoaded</span><span class="p">(</span><span class="kt">object</span> <span class="n">view</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">ticker</span> <span class="p">=</span> <span class="k">new</span> <span class="n">Ticker</span><span class="p"><</span><span class="n">TickerItemView</span><span class="p">>(((</span><span class="n">MainView</span><span class="p">)</span><span class="n">view</span><span class="p">).</span><span class="n">LayoutRoot</span><span class="p">);</span>
<span class="n">ticker</span><span class="p">.</span><span class="n">Speed</span> <span class="p">=</span> <span class="k">new</span> <span class="n">TimeSpan</span><span class="p">(</span><span class="m">0</span><span class="p">,</span> <span class="m">1</span><span class="p">,</span> <span class="m">0</span><span class="p">);</span>
<span class="n">ticker</span><span class="p">.</span><span class="n">ItemDisplayed</span> <span class="p">+=</span> <span class="n">ticker_ItemDisplayed</span><span class="p">;</span>
<span class="n">manager</span><span class="p">.</span><span class="n">Start</span><span class="p">();</span>
<span class="n">ticker</span><span class="p">.</span><span class="n">Start</span><span class="p">();</span>
<span class="p">}</span>
</pre></div>
</td></tr></table>
<p><strong>-Le premier problème :</strong> Tout s’exécute dés le lancement du projet>affichage de la vue et démarrage du bandeau</p>
<p><strong>-Le deuxième :</strong> Le Framework Caliburn detecte la vue ouverte et y place l'usercontrol servant de cadre au bandeau, et l'usercontrol servant d'objet de lecture pour le bandeau</p>
<p>Ce sont ces deux mécaniques je dois arriver à reproduire avec Mvvm light.</p>
<p><strong>Ma tentative</strong> :</p>
<p>Première différence, je n'ai pas de vue de "base". C'est un timer qui va toute les 5 minutes, vérifier, si un message est disponible sur le serveur. Si c'est le cas, il récupère une liste, et va instancier la vue qu'il faut. Mon responsable veut que ce soit le terminal client qui aille chercher et pas le serveur qui envoie.</p>
<p><em>Extrait du Timer</em></p>
<table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
2
3
4
5
6
7
8
9
10
11</pre></div></td><td class="code"><div class="codehilite"><pre> <span class="k">if</span> <span class="p">(</span><span class="n">service</span><span class="p">.</span><span class="n">IsAlertForMe</span><span class="p">(</span><span class="n">myIP</span><span class="p">)</span> <span class="p">==</span> <span class="k">true</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">MessageBox</span><span class="p">.</span><span class="n">Show</span><span class="p">(</span><span class="s">"That for you !"</span><span class="p">);</span>
<span class="n">TickerLayout</span> <span class="n">tick</span> <span class="p">=</span> <span class="k">new</span> <span class="n">TickerLayout</span><span class="p">();</span>
<span class="n">tb</span> <span class="p">=</span> <span class="n">App</span><span class="p">.</span><span class="n">Current</span><span class="p">.</span><span class="n">Resources</span><span class="p">[</span><span class="s">"NotifyIcon"</span><span class="p">]</span> <span class="k">as</span> <span class="n">TaskbarIcon</span><span class="p">;</span>
<span class="n">tb</span><span class="p">.</span><span class="n">ShowCustomBalloon</span><span class="p">(</span><span class="n">tick</span><span class="p">,</span> <span class="n">PopupAnimation</span><span class="p">.</span><span class="n">Slide</span><span class="p">,</span> <span class="m">40000</span><span class="p">);</span>
<span class="p">}</span>
<span class="k">else</span>
<span class="p">{</span>
<span class="n">MessageBox</span><span class="p">.</span><span class="n">Show</span><span class="p">(</span><span class="s">"Rien pour toi !"</span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
</td></tr></table>
<p>L'objectif est ici d'afficher le Layout du bandeau et d'y charger l'objet servant à la lecture. C'est le soucis, je ne sais pas comment avec Mvvm light, charger un contrôle dans un contrôle. J'ai fais un test avec un relaycommand, mais je n'ai pas mon message, mon contrôle "TickerNormalView" ne se charge pas.</p>
<p><em>Extrait de mon ViewModel</em></p>
<table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19</pre></div></td><td class="code"><div class="codehilite"><pre> <span class="k">private</span> <span class="n">Ticker</span><span class="p"><</span><span class="n">TickerNormalView</span><span class="p">></span> <span class="n">ticker</span><span class="p">;</span>
<span class="k">private</span> <span class="k">readonly</span> <span class="n">IDataService</span> <span class="n">_dataService</span><span class="p">;</span>
<span class="k">public</span> <span class="n">RelayCommand</span> <span class="n">TickerItemLoaded</span> <span class="p">{</span> <span class="k">get</span><span class="p">;</span> <span class="k">private</span> <span class="k">set</span><span class="p">;</span> <span class="p">}</span>
<span class="k">private</span> <span class="k">void</span> <span class="nf">OnTickerLoaded</span><span class="p">()</span>
<span class="p">{</span>
<span class="n">MessageBox</span><span class="p">.</span><span class="n">Show</span><span class="p">(</span><span class="s">"TickerItem chargé !"</span><span class="p">);</span>
<span class="n">TickerLayout</span> <span class="n">layout</span> <span class="p">=</span> <span class="k">new</span> <span class="n">TickerLayout</span><span class="p">();</span>
<span class="n">ticker</span> <span class="p">=</span> <span class="k">new</span> <span class="n">Ticker</span><span class="p"><</span><span class="n">TickerNormalView</span><span class="p">>(</span><span class="n">layout</span><span class="p">.</span><span class="n">LayoutRoot</span><span class="p">);</span>
<span class="n">ticker</span><span class="p">.</span><span class="n">Speed</span> <span class="p">=</span> <span class="k">new</span> <span class="n">TimeSpan</span><span class="p">(</span><span class="m">0</span><span class="p">,</span> <span class="m">1</span><span class="p">,</span> <span class="m">0</span><span class="p">);</span>
<span class="n">manager</span><span class="p">.</span><span class="n">Start</span><span class="p">();</span>
<span class="n">ticker</span><span class="p">.</span><span class="n">Start</span><span class="p">();</span>
<span class="p">}</span>
<span class="k">public</span> <span class="nf">TickerViewModel</span><span class="p">(</span><span class="n">IDataService</span> <span class="n">dataService</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">_dataService</span> <span class="p">=</span> <span class="n">dataService</span><span class="p">;</span>
<span class="n">TickerItemLoaded</span> <span class="p">=</span> <span class="k">new</span> <span class="n">RelayCommand</span><span class="p">(()</span> <span class="p">=></span> <span class="n">OnTickerLoaded</span><span class="p">());</span>
<span class="p">}</span>
</pre></div>
</td></tr></table>
<p>J'ai une belle pelote, et je ne sais pas trop comment la dérouler. Je vais poser une question bête mais j'instancie donc deux fois mon objet TickerLayout (dans mon timer et dans mon viewmodel), j'imagine que cela n'est pas une bonne pratique.</p>
<p>J'ai besoin d’assistance pour savoir:
-Revenir sous Caliburn
-Tenter de fusionner Mvvm light et Caliburn(sachant que l'un et l'autre auront des actions bien distinctes)
-Rester avec ma situation actuelle</p>
<p>J’espère que vous pourrez éclairer ma lanterne !
Cordialement.</p>