How to get the List of Sorted SystemParameters in WPF using F#

Today I am discussing that how can we get the Sorted list of System Parameters. We need a GridView, ListView and TextBlock control for implementation of Sorted SytemParameters. Firstly we will define two GridView column and then we create a DataTemplate for the second Column and display the List of the SystemParameters.

You will create two GridView column by the below code block.

// Create two GridView columns.
new GridViewColumn(Header="Property Name",
                   Width=200.0,
                   DisplayMemberBinding = new Binding("Name"))
   |> grvlu.Columns.Add                   

Then you will create a DataTemplate for the second column by the below code block.

// Create DataTemplate for second column
let template = new DataTemplate(typeof<string>)
let factoryTextBlock = new FrameworkElementFactory(typeof<TextBlock>) 
(TextBlock.HorizontalAlignmentProperty, HorizontalAlignment.Right)
   |> factoryTextBlock.SetValue
 
(TextBlock.TextProperty,new Binding("Value"))
  |> factoryTextBlock.SetBinding
 
template.VisualTree <- factoryTextBlock
 
new GridViewColumn(Header="Value",
                   Width=200.0,
                   CellTemplate=template,
                   DisplayMemberBinding = new Binding("Value"))
   |> grvlu.Columns.Add

Lastly You will sort the List of Parameters. The Below code is for sorting the Parameters.

let
srtlst = new SortedList<string,ParaSys>()
 
typeof<SystemParameters>.GetProperties() |> Seq.iter (fun prop ->
   if (prop.PropertyType <> typeof<ResourceKey>) then
      (prop.Name,
       new ParaSys(Name=prop.Name,
                       Value = prop.GetValue(null,null)))
       |> srtlst.Add
   )
vlst.ItemsSource <- srtlst.Values  

Steps For sorted SystemParameters

Step 1: Firstly Open a new project in F# using Visual Studio 2010. Select F# WPF application template and give name to it like below image.

New Project Dialog Box

Step 2: Now add the below define references to the project by right clicking on project in solution explorer.

  • PresentationCore

  • PresentationFramework

  • System

  • System.Xaml

  • WindowsBase

Step 3: When you will add all these refrences your Solution Explorer will look like below image.

Solution Explorer

Step 4: Now click on Program.fs file in solution explorer and write below code in Program.fs window, your window will look like below image.

SystemParameters code Part1

SystemParameters code Part1.1

#light
 
 
 
open System
 
open System.Collections.Generic
 
open System.ComponentModel
 
open System.Reflection
 
open System.Windows
 
open System.Windows.Controls
 
open System.Windows.Data
 
open System.Windows.Input
 
open System.Windows.Media
  
 
type ParaSys() = class
 
   let mutable nStr=""
 
   let mutable ovl = null
 
  
    member this.Name
       with get() = nStr
       and set (value:string) = nStr <- value
  
    member this.Value
       with get() = ovl
       and set (value:obj) = ovl <- value
  
    override this.ToString() =
       this.Name + "=" + this.Value.ToString()
 
end
 
 
  
 
let grvlu = new GridView()
 
let vlst = new ListView(View=grvlu)
  
 
// Create two GridView columns.
 
new GridViewColumn(Header="Property Name",
                    Width=200.0,
                    DisplayMemberBinding = new Binding("Name"))
    |> grvlu.Columns.Add                   
  
   
 
// Create DataTemplate for second column
 
let template = new DataTemplate(typeof<string>)
 
let factoryTextBlock = new FrameworkElementFactory(typeof<TextBlock>) 
 (TextBlock.HorizontalAlignmentProperty, HorizontalAlignment.Right)
    |> factoryTextBlock.SetValue
  
 (TextBlock.TextProperty,new Binding("Value"))
   |> factoryTextBlock.SetBinding
  
 template.VisualTree <- factoryTextBlock
  
 
new GridViewColumn(Header="Value",
                    Width=200.0,
                    CellTemplate=template,
                    DisplayMemberBinding = new Binding("Value"))
    |> grvlu.Columns.Add
  
 
let srtlst = new SortedList<string,ParaSys>()
  
 typeof<SystemParameters>.GetProperties() |> Seq.iter (fun prop ->
 
   if (prop.PropertyType <> typeof<ResourceKey>) then
 
      (prop.Name,
        new ParaSys(Name=prop.Name,
                        Value = prop.GetValue(null,null)))
        |> srtlst.Add
    )
 vlst.ItemsSource <- srtlst.Values  
                             
 
let wndw = new Window(Title="Sorted List of System Parameters",
                         Content=vlst)
  
  
 
#if COMPILED
 [<STAThread()>]
 
do
     let app =  Application() in
 
    app.Run(wndw) |> ignore
 
#endif

Step 5: Now press F5 to execute the Code.

Output

Systemparam Output1

Systemparam Output2

Systemparam Output3

Summary

In this article I have Discussed that how to get the Sorted List of SystemParameters in WPF using F#.