Page 3 of 4
HELP - with X# syntax - Relay Command ...
Posted: Sun Jan 15, 2017 11:24 am
by Phil Hepburn
Hi Wolfgang,
I totally understand what you are saying, and its a good solution for you and your customers.
However, there is a need to open up the world of .NET coding to others not quite as experienced and knowledgeable as yourself. And that is part of my role in the community, both local and international.
I for one, am not good enough to write my own Frameworks, and also we need to realise that Frameworks are just another way of extending the Language - in the good old days we would keep getting language updates, with the new functionality built in. And any keen programmer wanted the latest version (XYZ... ) of the language.
Also (before I leave) we need to remember what Franz DeWitt said in Stuttgart a few conferences ago, about us guys NOT re-inventing the wheel, and that we should go and look for what is already out there, tested and tried.
After all, we don't sit about worrying over all the parts of the .NET Framework that we are not currently using! So what's the difference?
Must go, wife calling ;-0)
Cheers,
Phil.
HELP - with X# syntax - Relay Command ...
Posted: Sun Jan 22, 2017 11:32 am
by Phil Hepburn
Hi guys,
Here is something I promised you I would post, a few days ago now.
We will examine the more standard type/style of coding behind the 'RelayCommand' response of the "Add New Line" (ANL) button.
Here is the XAML script for this ANL button :-
- Pearls_EF6_82.jpg (65.38 KiB) Viewed 517 times
And here is the initialisation for the RC (relay command) :-
- Pearls_EF6_83.jpg (60.63 KiB) Viewed 517 times
And finally, we get to the sort of code we all have grown up with, check this out :-
- Pearls_EF6_81.jpg (168.99 KiB) Viewed 517 times
Yes, when we click the button for adding a new 'OrderLine' object, we need to do some basic checks of a non-LINQ nature (there's a change).
First of all on line 273 we check for a reasonable 'quantity' - in my case not zero and not double figures, so '11' and '33' can't be used - typo or key bounce.
Line 280 checks to see that we have a genuine Product ID - or a product not selected when we pressed the button.
And then on line 287/288 we check to see if the product has already been selected - in a previous line addition. Probably a more likely 'needed' cross-check.
Okay, checks not perfect, but do some of the basic sort of cross-checking we may need or expect. Then we simply go ahead and add the new line to the growing list for the new order on line 297. Note we first calculate the line price from quantity and product price.
Finally, line 304 updates the running total (or sum) for the value of the order. All the order lines summed up.
This was the process you may have seen in the Video clip Robert made available as an attached file in another (and related) post.
Now then guys, back to my 'sick' office PC. I have issues which I may post you about ;-0((
Regards, and enjoy the rest of your weekend,
Phil.
Wales, UK.
P.S. by the way, the code almost handles OK the case where we delete an entry from the data grid - at the moment all is well except and auto update of the order running total - hence the button to force this. Work in progress !!
HELP - with X# syntax - Relay Command ...
Posted: Sun Jan 22, 2017 2:12 pm
by Frank Maraite
Hi Phil,
thanks for sharing. I learned a lot. Yes, my comment on RelayCommand last week was totally wrong. Don't no why, I didn't read carefully enough. So please forgive me.
Do you know this article:
https://msdn.microsoft.com/en-us/magazine/dn237302.aspx
?
He is showing us to use RelayCommand with every event: EventToCommand.
Frank
HELP - with X# syntax - Relay Command ...
Posted: Sun Jan 22, 2017 3:14 pm
by Frank Maraite
Hi Phil,
thanks for sharing. I learned a lot. Yes, my comment on RelayCommand last week was totally wrong. Don't no why, I didn't read carefully enough. So please forgive me.
Do you know this article:
https://msdn.microsoft.com/en-us/magazine/dn237302.aspx
?
He is showing us to use RelayCommand with every event: EventToCommand.
Frank
HELP - with X# syntax - Relay Command ...
Posted: Sun Jan 22, 2017 5:05 pm
by NickFriend
Hi Phil,
Good stuff, but I'm surprised at 287-292 from a dedicated LINQ man such as yourself!
(In C# in case I do the X# syntax wrong...)
Code: Select all
if (aOrderLines.Where(o => o.oProduct.ProductId == oSelectedProduct.ProductId).FirstOrDefault() != null)
......
Nick
HELP - with X# syntax - Relay Command ...
Posted: Sun Jan 22, 2017 9:34 pm
by Phil Hepburn
Hi Frank,
Thanks for this, I could do with including more events, not just clicks on Buttons ;-0)
I will look at this in the next couple of days, as I would like to somehow respond to rows being deleted from the data grid of new OrderLines. So that I can have the Order value total updated.
Fingers crossed,
Phil.
P.S. note the article you pointed at was by Laurent - the guy who is GalaSoft, and who created MVVMlight.
HELP - with X# syntax - Relay Command ...
Posted: Sun Jan 22, 2017 9:39 pm
by Phil Hepburn
Nice one Nick,
At least someone is still awake at the back of the class ;-0)
Tomorrow I will steal your LINQ code and insert it into my X# eNotes for Cologne.
I will add your name so that I can blame you if anything related to it was to go wrong.
So me trying to show others some sort of code snippet that wasn't LINQ related, failed. You are now therefore suggesting that everything can, and should be done, in a LINQ fashion.
I am sure you are right.
Speak soo,
and regards,
Phil.
HELP - with X# syntax - Relay Command ...
Posted: Mon Jan 23, 2017 9:14 am
by NickFriend
Hi Phil,
... well the only thing is, as you know wherever you see a foreach, Linq will normally do it neater.
Nick
HELP - with X# syntax - Relay Command ...
Posted: Tue Jan 24, 2017 10:14 am
by Phil Hepburn
Hi Nick,
Well, I have followed through your advice and have now got working some code as shown in the following image :-
- PearlsNickLINQ_02.jpg (44.13 KiB) Viewed 518 times
I have separated the query line to be formatted similarly to the rest of my LINQ code. Just for easy comparison.
The next image shows it at work, when I try to duplicate a previously entered product :-
- PearlsNickLINQ_01.jpg (49.32 KiB) Viewed 518 times
Although seemingly simple, this code introduces an important topic, that of when we can (or more likely can't) mix .NET objects with other query code.
By this I mean that when we write a query for use with a back-end SQL data engine, the code needs to be easily translated into standard T-SQL script. We can't use a .NET object which is not then known to the SQL Server. We need to be careful.
I will try to reproduce such an occurrence and post it later after this post. Just as a learning 'point'.
This is really the only difference between LINQ to Objects and 'L2S' and 'L2E' [Linq to SQL and Linq to Entity], when the SQL data engine needs to be considered.
So to summarise, the mental 'trigger' for me, will be if I try to reach for code involving FOREACH, then there must be a LINQ/Extension Method way of coding it.
Thanks for the advice and help,
Phil.
Wales, UK.
HELP - with X# syntax - Relay Command ...
Posted: Tue Jan 24, 2017 11:57 am
by Frank Maraite
Hi Nick, Phil,
beside of different syntax is there any technical difference behind the scene? Meaning: is the compiled result different? Are there performance differences?
The FORAECH way seems very straightforeward for me. The readability depends of the time of use. I would like to see reasons other than 'personal preference'. I see MS did many extension methods to collection to make them work together with LINQ. This makes it similar to use with either SQL or Collections. Is this the main reason?
Frank