Working with dynamic actions and Partial Views in the CODE Framework – Part 1

by Joe on Jan 23rd in .Net, C#, CODE Framework, WPF, XAML

Recently, I had a need to create a CODE Framework application with partial views, which included different ViewActions based on which Partial View was visible at the time. I found it to be a fairly interesting problem, and decided to share my solution.

Since I obviously can’t blog with pictures of the customer application, I decided to steal a page from Devlin Liles and write a Pizza restaurant application.

The end result should look something like the following two pictures:

End result - Pizza

Final result of the pizza ordering

End result - Sides

Final result of the “sides” ordering

The first step is to configure the layout to allow the slightly unusual format. Typically, in a CODE Framework application, the standard view allows for two view areas.

This image shows the views above. The search box is the secondary form, and the list is the primary form.

Primary and secondary view

Example of primary and secondary views

In this case, we need to add the third area… The column with the buttons for “Pizza Selection” and “Side Selection” on the left hand side.

The way I chose to tackle this was to bring the ResourceDictionary from the framework into the application, and work directly with the Resource Dictionary, rather than trying to override it in another file. This particular dictionary is “Metro-Layout-PrimarySecondaryForm.Xaml”. Always remember: you can download the source for the CODE Framework from CodePlex, not just the runtime DLLs. If you get the source code, you can work with the Resource Dictionaries, source code, etc at any time.

In this particular case, I want to modify this particular style:

to make it look like the following style:

The only significant change was the addition of this line: “SecondaryUIElementAlignmentChangeSize =’1′” in the Grid properties. However, this tells the grid to split on a vertical axis, instead of a horizontal axis, if the secondary view is ever larger than 1 pixel. Which it almost always is.

Once this is accomplished, the actual views can be created, and the view models can be coded.

The following view demonstrates using the PrimarySecondaryFormLayout-Vertical-Split as well as the CODE Framework Partial View method to create a shell, in which we can load child partial views.

The partial view may look a little daunting, but it really isn’t. I’m going to assume that you have at least some familiarity with either the CODE Framework or ASP.Net MVC.

The PartialView control on the view allows us to call an action on a controller. In this case, I am specifying a specific controller: “ReviewController”, but the action is bound at runtime to a property in “ReviewViewModel” called “MainReviewScreen”.

Once the MainReviewScreen updates, the Controller Action is called, and the Partial View is changed.

The action is fairly simple. It returns a view, but it returns it into the current view, in such a way as it can be used as a child item. In other words, it allows you to reuse a view as either a regular view, or a partial view!

Once all of that has been accomplished… We get to add in what is now just a standard, run of the mill view.

Yes, we could offload some of the templating to resource dictionaries. That’s not the point of this demo. Get over it. What IS worth noting is this:
Style=”{DynamicResource CODE.Framework-Layout-PrimarySecondaryFormLayout}”

That is the line that differentiates this style from our master. It tells us that THIS view will split the primary\secondary on the horizontal, not on the vertical. Which is important.

Ok. That’s enough for tonight. Next step is to get the view models working. That’s up for this weekend some time. Later!

5 Comments

  1. Andres

    27th February 2016

    Hi Joe,

    I’m working in VS2015, I read your article but I see in the “error list” this message: “Error: The TypeConverter for “UIElementTypes” does not support converting from a string.”.

    When I use ‘mvvm:View.UIElementType=”Primary”‘ and ‘UIElementType=”Secondary”‘

    Please, Can you help me?

    Thank you.

    • Joe

      21st April 2016

      Andres,
      Without a little more information, I’m afraid not – you might try checking the CODE Framework discussion boards on CodePlex though. They have a pretty active forum there.

Leave a Reply

Powered By Wordpress Designed By Ridgey