<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet type="text/xsl" href="RSS_xslt_style.asp" version="1.0" ?>
<rss version="2.0" xmlns:WebWizForums="http://syndication.webwiz.co.uk/rss_namespace/">
 <channel>
  <title>DevForce Community Forum : Calculated fields and NotifyPropertyChanged</title>
  <link>http://www.ideablade.com/forum/</link>
  <description>This is an XML content feed of; DevForce Community Forum : DevForce 2010 : Calculated fields and NotifyPropertyChanged</description>
  <pubDate>Wed, 10 Jun 2026 17:02:57 -700</pubDate>
  <lastBuildDate>Wed, 25 Aug 2010 19:30:01 -700</lastBuildDate>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Web Wiz Forums 9.69</generator>
  <ttl>360</ttl>
  <WebWizForums:feedURL>www.ideablade.com/forum/RSS_post_feed.asp?TID=2066</WebWizForums:feedURL>
  <image>
   <title>DevForce Community Forum</title>
   <url>http://www.ideablade.com/forum/forum_images/IdeaBlade_logo_tm.png</url>
   <link>http://www.ideablade.com/forum/</link>
  </image>
  <item>
   <title>Calculated fields and NotifyPropertyChanged : OrderDetails is a navigation property,...</title>
   <link>http://www.ideablade.com/forum/forum_posts.asp?TID=2066&amp;PID=8200#8200</link>
   <description>
    <![CDATA[<strong>Author:</strong> <a href="http://www.ideablade.com/forum/member_profile.asp?PF=477" rel="nofollow">ting</a><br /><strong>Subject:</strong> 2066<br /><strong>Posted:</strong> 25-Aug-2010 at 7:30pm<br /><br />OrderDetails is a navigation property, so there is no setter which is why the AfterSet doesn't trigger.<DIV>&nbsp;</DIV><DIV>Here's what I would do.</DIV><DIV>1)&nbsp; On Order, define this method:</DIV><DIV>internal void OnTotalAmountChanged() {</DIV><DIV>&nbsp; OnPropertyChanged(new PropertyChangedEventArgs("TotalAmount"));</DIV><DIV>}</DIV><DIV>&nbsp;</DIV><DIV>2)&nbsp; In the OrderDetail, whenever you know that Total changes,&nbsp;call this.Order.OnTotalAmountChanged().&nbsp; Depending on your implementation, this might occur in multiple places.</DIV><DIV>&nbsp;</DIV><DIV>3)&nbsp; For refactoring purposes, have FireTotalChanged() call OnTotalAmountChanged().</DIV><DIV>&nbsp;</DIV><DIV>Be very careful about propagating changed events across objects.&nbsp; You can cause UI performance problems or infinite loops if you chain to many objects together.</DIV><DIV>&nbsp;</DIV>]]>
   </description>
   <pubDate>Wed, 25 Aug 2010 19:30:01 -700</pubDate>
   <guid isPermaLink="true">http://www.ideablade.com/forum/forum_posts.asp?TID=2066&amp;PID=8200#8200</guid>
  </item> 
  <item>
   <title>Calculated fields and NotifyPropertyChanged : I have a followup: how do I calculate...</title>
   <link>http://www.ideablade.com/forum/forum_posts.asp?TID=2066&amp;PID=8176#8176</link>
   <description>
    <![CDATA[<strong>Author:</strong> <a href="http://www.ideablade.com/forum/member_profile.asp?PF=891" rel="nofollow">bigme</a><br /><strong>Subject:</strong> 2066<br /><strong>Posted:</strong> 24-Aug-2010 at 11:29pm<br /><br />I have a followup: how do I calculate a total from a collection of subtotals (eg the Order.TotalAmount from the sum of the OrderDetail.Totals).<br><title>Snippet</title><pre style="font-family: c&#111;nsolas;"><title>Snippet</title><pre style="font-family: c&#111;nsolas;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">public</span>&nbsp;<span style="color: blue;">partial</span>&nbsp;<span style="color: blue;">class</span>&nbsp;<span style="color: rgb43, 145, 175;">Order</span><br>&nbsp;&nbsp;&nbsp;&nbsp;{<br> <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#091;<span style="color: rgb43, 145, 175;">Bindable</span>(<span style="color: blue;">true</span>,&nbsp;<span style="color: rgb43, 145, 175;">BindingDirection</span>.OneWay)&#093;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#091;<span style="color: rgb43, 145, 175;">Editable</span>(<span style="color: blue;">false</span>)&#093;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">public</span>&nbsp;<span style="color: rgb43, 145, 175;">Decimal</span>&nbsp;Subtotal<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">get</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">decimal</span>&nbsp;subtotal&nbsp;=&nbsp;OrderDetails.Sum(od&nbsp;=&gt;&nbsp;od.Total);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">return</span>&nbsp;subtotal;<br>&nbsp;&nbsp;&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;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#091;<span style="color: rgb43, 145, 175;">Bindable</span>(<span style="color: blue;">true</span>,&nbsp;<span style="color: rgb43, 145, 175;">BindingDirection</span>.OneWay)&#093;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#091;<span style="color: rgb43, 145, 175;">Editable</span>(<span style="color: blue;">false</span>)&#093;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">public</span>&nbsp;<span style="color: rgb43, 145, 175;">Decimal</span>&nbsp;TaxAmount<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">get</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">decimal</span>&nbsp;taxAmount&nbsp;=&nbsp;OrderDetails.Sum(od&nbsp;=&gt;&nbsp;od.TotalTax);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">if</span>&nbsp;(Tax&nbsp;!=&nbsp;<span style="color: blue;">null</span>)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;taxAmount&nbsp;+=&nbsp;&nbsp;(Freight.HasValue&nbsp;?&nbsp;Freight.Value&nbsp;:&nbsp;0.00M)&nbsp;*&nbsp;Tax.Rate;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">return</span>&nbsp;taxAmount;<br>&nbsp;&nbsp;&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;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#091;<span style="color: rgb43, 145, 175;">Bindable</span>(<span style="color: blue;">true</span>,&nbsp;<span style="color: rgb43, 145, 175;">BindingDirection</span>.OneWay)&#093;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#091;<span style="color: rgb43, 145, 175;">Editable</span>(<span style="color: blue;">false</span>)&#093;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">public</span>&nbsp;<span style="color: rgb43, 145, 175;">Decimal</span>&nbsp;TotalAmount<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">get</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">return</span>&nbsp;Subtotal&nbsp;+&nbsp;(Freight.HasValue&nbsp;?&nbsp;Freight.Value&nbsp;+&nbsp;Freight.Value&nbsp;*&nbsp;Tax.Rate&nbsp;:&nbsp;0.00M)&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br> <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#091;<span style="color: rgb43, 145, 175;">AfterSet</span>(<span style="color: rgb43, 145, 175;">EntityPropertyNames</span>.OrderDetails)&#093;&nbsp;<span style="color: green;">//&nbsp;&lt;=&nbsp;THIS&nbsp;NEVER&nbsp;FIRES&nbsp;??</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#091;<span style="color: rgb43, 145, 175;">AfterSet</span>(<span style="color: rgb43, 145, 175;">EntityPropertyNames</span>.Freight)&#093;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#091;<span style="color: rgb43, 145, 175;">AfterSet</span>(<span style="color: rgb43, 145, 175;">EntityPropertyNames</span>.Tax)&#093;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">private</span>&nbsp;<span style="color: blue;">void</span>&nbsp;FireTotalChanged(<span style="color: rgb43, 145, 175;">IPropertyInterceptorArgs</span>&nbsp;args)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OnPropertyChanged(<span style="color: blue;">new</span>&nbsp;<span style="color: rgb43, 145, 175;">PropertyChangedEventArgs</span>(<span style="color: rgb163, 21, 21;">"TotalAmount"</span>));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br> <br>&nbsp;&nbsp;&nbsp;&nbsp;}</pre></pre>The problem is that FireTotalChanged() is not called when any OrderDetails.Total changes. <br><br>Dave.<br><br>]]>
   </description>
   <pubDate>Tue, 24 Aug 2010 23:29:57 -700</pubDate>
   <guid isPermaLink="true">http://www.ideablade.com/forum/forum_posts.asp?TID=2066&amp;PID=8176#8176</guid>
  </item> 
  <item>
   <title>Calculated fields and NotifyPropertyChanged : Thanks ting!I don&amp;#039;t know...</title>
   <link>http://www.ideablade.com/forum/forum_posts.asp?TID=2066&amp;PID=8085#8085</link>
   <description>
    <![CDATA[<strong>Author:</strong> <a href="http://www.ideablade.com/forum/member_profile.asp?PF=891" rel="nofollow">bigme</a><br /><strong>Subject:</strong> 2066<br /><strong>Posted:</strong> 17-Aug-2010 at 11:51pm<br /><br />Thanks ting!<br><br>I don't know how I missed your implementation of OnPropertyChanged. And forgetting to calculate the total before getting was a pretty stupid error too! On the plus side, the quality of my forum posts can only improve :-)<br><br>Dave.<br><br>]]>
   </description>
   <pubDate>Tue, 17 Aug 2010 23:51:17 -700</pubDate>
   <guid isPermaLink="true">http://www.ideablade.com/forum/forum_posts.asp?TID=2066&amp;PID=8085#8085</guid>
  </item> 
  <item>
   <title>Calculated fields and NotifyPropertyChanged : Whenanything Total depends on...</title>
   <link>http://www.ideablade.com/forum/forum_posts.asp?TID=2066&amp;PID=8083#8083</link>
   <description>
    <![CDATA[<strong>Author:</strong> <a href="http://www.ideablade.com/forum/member_profile.asp?PF=477" rel="nofollow">ting</a><br /><strong>Subject:</strong> 2066<br /><strong>Posted:</strong> 17-Aug-2010 at 8:12pm<br /><br /><DIV>When&nbsp;anything Total depends on changes, you should recalculate Total and fire OnPropertyChanged() for "Total".&nbsp; The DevForce Entity already implements INotifyPropertyChanged, so you shouldn't need your own event.&nbsp; I've written what I think your code should look like below.&nbsp; You could simplify and calculate Total on every get, but I cached the value in case you were concerned about performance.</DIV><DIV>&nbsp;</DIV><DIV>&nbsp;</DIV><DIV>&nbsp; public partial class OrderDetail : IbEm.Entity {<BR>&nbsp;&nbsp;&nbsp; private decimal total;<BR>&nbsp;&nbsp;&nbsp; private bool totalInitialized = false;</DIV><P>&nbsp;&nbsp;&nbsp; &#091;Bindable(true, BindingDirection.TwoWay)&#093;<BR>&nbsp;&nbsp;&nbsp; &#091;Editable(false)&#093;<BR>&nbsp;&nbsp;&nbsp; public Decimal Total {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!totalInitialized) CalculateTotal();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return total;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; }</P><P>&nbsp;&nbsp;&nbsp; &#091;AfterSet(EntityPropertyNames.UnitPrice)&#093;<BR>&nbsp;&nbsp;&nbsp; &#091;AfterSet(EntityPropertyNames.Quantity)&#093;<BR>&nbsp;&nbsp;&nbsp; &#091;AfterSet(EntityPropertyNames.TaxID)&#093;<BR>&nbsp;&nbsp;&nbsp; &#091;AfterSet(EntityPropertyNames.Discount)&#093;<BR>&nbsp;&nbsp;&nbsp; public void FireTotalChanged(PropertyInterceptorArgs&lt;OrderDetail, String&gt; args) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CalculateTotal();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OnPropertyChanged(new PropertyChangedEventArgs("Total"));<BR>&nbsp;&nbsp;&nbsp; }</P><P>&nbsp;&nbsp;&nbsp; public void CalculateTotal() {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Decimal discountPrice = UnitPrice - UnitPrice * (Decimal)Discount;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Decimal gst = Math.Round(discountPrice * Tax.Rate, 2);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; total = Quantity * (discountPrice + gst);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; totalInitialized = true;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp; }</P><span style="font-size:10px"><br /><br />Edited by ting - 17-Aug-2010 at 8:14pm</span>]]>
   </description>
   <pubDate>Tue, 17 Aug 2010 20:12:35 -700</pubDate>
   <guid isPermaLink="true">http://www.ideablade.com/forum/forum_posts.asp?TID=2066&amp;PID=8083#8083</guid>
  </item> 
  <item>
   <title>Calculated fields and NotifyPropertyChanged : I am new to DevForce and having...</title>
   <link>http://www.ideablade.com/forum/forum_posts.asp?TID=2066&amp;PID=8070#8070</link>
   <description>
    <![CDATA[<strong>Author:</strong> <a href="http://www.ideablade.com/forum/member_profile.asp?PF=891" rel="nofollow">bigme</a><br /><strong>Subject:</strong> 2066<br /><strong>Posted:</strong> 15-Aug-2010 at 4:55pm<br /><br />I am new to DevForce and having trouble getting derived fields to work. In the WCF RIA world I'd simply use partial classes and virtual overrides to calculate things such as Tax and Totals. With DevForce I have the luxury of Interceptors, but I'm confused about how to raise a change notification in this scenario. I'm using MVVM, so lets start with the ViewModel:<br><br><title>Snippet</title><pre style="font-family: c&#111;nsolas;">&nbsp;&nbsp;&nbsp;<span style="color: blue;">public</span>&nbsp;<span style="color: blue;">class</span>&nbsp;<span style="color: rgb43, 145, 175;">MainViewModel</span>&nbsp;:&nbsp;<span style="color: rgb43, 145, 175;">VM</span><br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">private</span>&nbsp;<span style="color: rgb43, 145, 175;">Order</span>&nbsp;currentOrder;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">public</span>&nbsp;<span style="color: rgb43, 145, 175;">Order</span>&nbsp;CurrentOrder<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">get</span>&nbsp;{&nbsp;<span style="color: blue;">return</span>&nbsp;currentOrder;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">set</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">if</span>&nbsp;(currentOrder&nbsp;==&nbsp;<span style="color: blue;">value</span>)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">return</span>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentOrder&nbsp;=&nbsp;<span style="color: blue;">value</span>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RaisePropertyChanged(<span style="color: rgb163, 21, 21;">"CurrentOrder"</span>);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteToLog(CurrentOrder&nbsp;==&nbsp;<span style="color: blue;">null</span>&nbsp;?&nbsp;<span style="color: rgb163, 21, 21;">"No&nbsp;Order"</span>&nbsp;:&nbsp;<span style="color: rgb163, 21, 21;">"Found&nbsp;order&nbsp;number&nbsp;"</span>&nbsp;+&nbsp;CurrentOrder.OrderID);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br> <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">private</span>&nbsp;<span style="color: blue;">readonly</span>&nbsp;<span style="color: rgb43, 145, 175;">NorthwindIBEntities</span>&nbsp;mgr;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: gray;">///</span><span style="color: green;">&nbsp;</span><span style="color: gray;">&lt;summary&gt;</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: gray;">///</span><span style="color: green;">&nbsp;Initializes&nbsp;a&nbsp;new&nbsp;instance&nbsp;of&nbsp;the&nbsp;MainViewModel&nbsp;class.</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: gray;">///</span><span style="color: green;">&nbsp;</span><span style="color: gray;">&lt;/summary&gt;</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">public</span>&nbsp;MainViewModel()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">if</span>&nbsp;(IsInDesignMode)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: green;">//&nbsp;Code&nbsp;runs&nbsp;in&nbsp;Blend&nbsp;--&gt;&nbsp;create&nbsp;design&nbsp;time&nbsp;data.</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">else</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mgr&nbsp;=&nbsp;<span style="color: blue;">new</span>&nbsp;<span style="color: rgb43, 145, 175;">NorthwindIBEntities</span>();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mgr.Fetching&nbsp;+=&nbsp;(s,&nbsp;e)&nbsp;=&gt;&nbsp;WriteToLog(e.Query);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mgr.Fetching&nbsp;+=&nbsp;(s,&nbsp;e)&nbsp;=&gt;&nbsp;IsBusy&nbsp;=&nbsp;<span style="color: blue;">true</span>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mgr.Queried&nbsp;+=&nbsp;(s,&nbsp;e)&nbsp;=&gt;&nbsp;IsBusy&nbsp;=&nbsp;<span style="color: blue;">false</span>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">var</span>&nbsp;q1&nbsp;=&nbsp;<span style="color: blue;">from</span>&nbsp;o&nbsp;<span style="color: blue;">in</span>&nbsp;mgr.Orders<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">select</span>&nbsp;o;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q1.ExecuteAsync(op&nbsp;=&gt;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurrentOrder&nbsp;=&nbsp;op.Results.First();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</pre><br>The CurrentOrder has a collection of OrderDetails, which is bound to a Grid like so:<br><br><title>Snippet</title><pre style="font-family: c&#111;nsolas;"><span style="color: rgb163, 21, 21;">&nbsp;</span><span style="color: blue;">&lt;</span><span style="color: rgb163, 21, 21;">sdk</span><span style="color: blue;">:</span><span style="color: rgb163, 21, 21;">DataGrid</span><span style="color: red;">&nbsp;AutoGenerateColumns</span><span style="color: blue;">=</span><span style="color: blue;">"False"</span><span style="color: red;">&nbsp;Height</span><span style="color: blue;">=</span><span style="color: blue;">"200"</span><span style="color: red;">&nbsp;ItemsSource</span><span style="color: blue;">="{</span><span style="color: rgb163, 21, 21;">Binding</span><span style="color: red;">&nbsp;CurrentOrder</span><span style="color: blue;">.</span><span style="color: blue;">OrderDetails</span><span style="color: blue;">,</span><span style="color: red;">&nbsp;Mode</span><span style="color: blue;">=</span><span style="color: blue;">TwoWay</span><span style="color: blue;">}</span><span style="color: blue;">"</span><span style="color: blue;">&gt;</span><br><span style="color: rgb163, 21, 21;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: blue;">&lt;</span><span style="color: rgb163, 21, 21;">sdk</span><span style="color: blue;">:</span><span style="color: rgb163, 21, 21;">DataGrid.Columns</span><span style="color: blue;">&gt;</span><br><span style="color: rgb163, 21, 21;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: blue;">&lt;</span><span style="color: rgb163, 21, 21;">sdk</span><span style="color: blue;">:</span><span style="color: rgb163, 21, 21;">DataGridTextColumn</span><span style="color: red;">&nbsp;Header</span><span style="color: blue;">=</span><span style="color: blue;">"Quantity"</span><span style="color: red;">&nbsp;Binding</span><span style="color: blue;">="{</span><span style="color: rgb163, 21, 21;">Binding</span><span style="color: red;">&nbsp;Quantity</span><span style="color: blue;">,</span><span style="color: red;">&nbsp;Mode</span><span style="color: blue;">=</span><span style="color: blue;">TwoWay</span><span style="color: blue;">}</span><span style="color: blue;">"</span><span style="color: blue;">&nbsp;/&gt;</span><br><span style="color: rgb163, 21, 21;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: blue;">&lt;</span><span style="color: rgb163, 21, 21;">sdk</span><span style="color: blue;">:</span><span style="color: rgb163, 21, 21;">DataGridTextColumn</span><span style="color: red;">&nbsp;Header</span><span style="color: blue;">=</span><span style="color: blue;">"Price"</span><span style="color: red;">&nbsp;Binding</span><span style="color: blue;">="{</span><span style="color: rgb163, 21, 21;">Binding</span><span style="color: red;">&nbsp;UnitPrice</span><span style="color: blue;">,</span><span style="color: red;">&nbsp;Mode</span><span style="color: blue;">=</span><span style="color: blue;">TwoWay</span><span style="color: blue;">}</span><span style="color: blue;">"</span><span style="color: blue;">&nbsp;/&gt;</span><br><span style="color: rgb163, 21, 21;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: blue;">&lt;</span><span style="color: rgb163, 21, 21;">sdk</span><span style="color: blue;">:</span><span style="color: rgb163, 21, 21;">DataGridTextColumn</span><span style="color: red;">&nbsp;Header</span><span style="color: blue;">=</span><span style="color: blue;">"Total"</span><span style="color: red;">&nbsp;Binding</span><span style="color: blue;">="{</span><span style="color: rgb163, 21, 21;">Binding</span><span style="color: red;">&nbsp;Total</span><span style="color: blue;">,</span><span style="color: red;">&nbsp;Mode</span><span style="color: blue;">=</span><span style="color: blue;">OneWay</span><span style="color: blue;">}</span><span style="color: blue;">"</span><span style="color: blue;">&nbsp;/&gt;</span><br><span style="color: rgb163, 21, 21;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: blue;">&lt;/</span><span style="color: rgb163, 21, 21;">sdk</span><span style="color: blue;">:</span><span style="color: rgb163, 21, 21;">DataGrid.Columns</span><span style="color: blue;">&gt;</span></pre>Finally, because I need to calculate the Total, I've extended the generated OrderDetail class as follows:<br><title>Snippet</title><pre style="font-family: c&#111;nsolas;"><span style="color: blue;">public</span>&nbsp;<span style="color: blue;">partial</span>&nbsp;<span style="color: blue;">class</span>&nbsp;<span style="color: rgb43, 145, 175;">OrderDetail</span>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">private</span>&nbsp;<span style="color: blue;">decimal</span>&nbsp;total;<br> <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#091;<span style="color: rgb43, 145, 175;">Bindable</span>(<span style="color: blue;">true</span>,&nbsp;<span style="color: rgb43, 145, 175;">BindingDirection</span>.TwoWay)&#093;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#091;<span style="color: rgb43, 145, 175;">Editable</span>(<span style="color: blue;">false</span>)&#093;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">public</span>&nbsp;<span style="color: rgb43, 145, 175;">Decimal</span>&nbsp;Total<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">get</span>&nbsp;{&nbsp;<span style="color: blue;">return</span>&nbsp;total;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">private</span>&nbsp;<span style="color: blue;">set</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">if</span>&nbsp;(total&nbsp;==&nbsp;<span style="color: blue;">value</span>)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">return</span>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;total&nbsp;=&nbsp;<span style="color: blue;">value</span>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NotifyPropertyChanged(<span style="color: rgb163, 21, 21;">"Total"</span>);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br> <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#091;<span style="color: rgb43, 145, 175;">AfterSet</span>(<span style="color: rgb43, 145, 175;">EntityPropertyNames</span>.UnitPrice)&#093;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#091;<span style="color: rgb43, 145, 175;">AfterSet</span>(<span style="color: rgb43, 145, 175;">EntityPropertyNames</span>.Quantity)&#093;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#091;<span style="color: rgb43, 145, 175;">AfterSet</span>(<span style="color: rgb43, 145, 175;">EntityPropertyNames</span>.TaxID)&#093;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#091;<span style="color: rgb43, 145, 175;">AfterSet</span>(<span style="color: rgb43, 145, 175;">EntityPropertyNames</span>.Discount)&#093;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">public</span>&nbsp;<span style="color: blue;">void</span>&nbsp;CalculateTotal(<span style="color: rgb43, 145, 175;">PropertyInterceptorArgs</span>&lt;<span style="color: rgb43, 145, 175;">OrderDetail</span>,&nbsp;<span style="color: rgb43, 145, 175;">String</span>&gt;&nbsp;args)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: rgb43, 145, 175;">Decimal</span>&nbsp;discountPrice&nbsp;=&nbsp;UnitPrice&nbsp;-&nbsp;UnitPrice&nbsp;*(<span style="color: rgb43, 145, 175;">Decimal</span>)Discount;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: rgb43, 145, 175;">Decimal</span>&nbsp;gst&nbsp;=&nbsp;<span style="color: rgb43, 145, 175;">Math</span>.Round(discountPrice&nbsp;*&nbsp;Tax.Rate,&nbsp;2);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Total&nbsp;=&nbsp;Quantity&nbsp;*&nbsp;(discountPrice&nbsp;+&nbsp;gst)&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br> <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: green;">//&nbsp;Declare&nbsp;the&nbsp;PropertyChanged&nbsp;event</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">public</span>&nbsp;<span style="color: blue;">event</span>&nbsp;<span style="color: rgb43, 145, 175;">PropertyChangedEventHandler</span>&nbsp;MyPropertyChanged;<br> <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: green;">//&nbsp;NotifyPropertyChanged&nbsp;will&nbsp;raise&nbsp;the&nbsp;PropertyChanged&nbsp;event&nbsp;passing&nbsp;the</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: green;">//&nbsp;source&nbsp;property&nbsp;that&nbsp;is&nbsp;being&nbsp;updated.</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">public</span>&nbsp;<span style="color: blue;">void</span>&nbsp;NotifyPropertyChanged(<span style="color: blue;">string</span>&nbsp;propertyName)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">if</span>&nbsp;(MyPropertyChanged&nbsp;!=&nbsp;<span style="color: blue;">null</span>)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyPropertyChanged(<span style="color: blue;">this</span>,&nbsp;<span style="color: blue;">new</span>&nbsp;<span style="color: rgb43, 145, 175;">PropertyChangedEventArgs</span>(propertyName));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br> <br>&nbsp;&nbsp;&nbsp;&nbsp;}</pre>There are several problems:<br><br>1. The total is not calculated. If I change the AfterSet to an AfterGet, then the Total IS calculated, but that seems very wrong to me.<br><br>2. Using an AfterGet, so that at least it triggers, if I set a breakpoint in the interceptor then I can see that the Total is calculated, but the value displayed is not updated.<br><br>I suspect that the problem is to do with change notification, but can't see what's wrong. Any help would be appreciated.<br><br>Dave.<br>]]>
   </description>
   <pubDate>Sun, 15 Aug 2010 16:55:08 -700</pubDate>
   <guid isPermaLink="true">http://www.ideablade.com/forum/forum_posts.asp?TID=2066&amp;PID=8070#8070</guid>
  </item> 
 </channel>
</rss>