Set up ObjectDataProvider in code : ObjectDataProvider « Windows Presentation Foundation « VB.Net Tutorial






<Window x:Class="WpfApplication1.Monitor"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:diag="clr-namespace:System.Diagnostics;assembly=System"
        xmlns:system="clr-namespace:System;assembly=mscorlib"
        Title="Monitor" Height="400" Width="389">
    <Grid>
        <Grid.Resources>
            <ObjectDataProvider x:Key="processes" MethodName="GetProcesses" ObjectType="{x:Type diag:Process}"/>
            <ObjectDataProvider x:Key="dateinfo" ObjectType="{x:Type system:DateTime}"/>
        </Grid.Resources>
        <ListView Name="listView1" ItemsSource="{Binding Source={StaticResource processes}}">
        </ListView>
    </Grid>
</Window>
//File:Window.xaml.vb

Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Text
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Data
Imports System.Windows.Documents
Imports System.Windows.Input
Imports System.Windows.Media
Imports System.Windows.Media.Imaging
Imports System.Windows.Shapes

Imports System.Diagnostics
Imports System.Windows.Markup
Imports System.Xml
Imports System.IO
Imports System.Timers

Namespace WpfApplication1
  Public Partial Class Monitor
    Inherits Window
    Public Sub New()
      InitializeComponent()
      Dim provider As New ObjectDataProvider()
      provider.ObjectType = GetType(Process)
      provider.MethodName = "GetProcesses"

      Dim binding As New Binding()
      PresentationTraceSources.SetTraceLevel(binding, PresentationTraceLevel.High)
      binding.Source = provider
      binding.Mode = BindingMode.OneWay
      binding.UpdateSourceTrigger = UpdateSourceTrigger.Explicit
      listView1.ItemTemplate = CreateItemTemplateFromXaml()
      listView1.SetBinding(ListView.ItemsSourceProperty, binding)
    End Sub

    Private Function CreateItemTemplateFromXaml() As DataTemplate
      Dim templateXml As String = "<DataTemplate xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'><TextBlock Text='{Binding Path=ProcessName}'/></DataTemplate>"
      Dim templateBytes As Byte() = Encoding.UTF8.GetBytes(templateXml)

      Using templateStream As New MemoryStream(templateBytes)
        Dim template As DataTemplate = DirectCast(XamlReader.Load(templateStream), DataTemplate)
        Return template
      End Using
    End Function

    Private Function CreateItemTemplate() As DataTemplate
      Dim template As New DataTemplate()

      Dim panelFactory As New FrameworkElementFactory(GetType(WrapPanel))

      Dim idTextFactory As New FrameworkElementFactory(GetType(TextBlock))
      idTextFactory.SetBinding(TextBlock.TextProperty, New Binding("Id"))
      idTextFactory.SetValue(TextBlock.MinWidthProperty, 80.0)

      Dim workingSetTextFactory As New FrameworkElementFactory(GetType(TextBlock))
      workingSetTextFactory.SetBinding(TextBlock.TextProperty, New Binding("WorkingSet"))

      panelFactory.AppendChild(idTextFactory)
      panelFactory.AppendChild(workingSetTextFactory)
      template.VisualTree = panelFactory

      Return template
    End Function
  End Class
End Namespace
WPF Set Up Object Data Provider In Code








16.102.ObjectDataProvider
16.102.1.Create ObjectDataProvider and bind object to it in codeCreate ObjectDataProvider and bind object to it in code
16.102.2.The ObjectDataProvider exposes the enum as a binding sourceThe ObjectDataProvider exposes the enum as a binding source
16.102.3.Set up ObjectDataProvider in codeSet up ObjectDataProvider in code
16.102.4.Bind to Object to ObjectDataProviderBind to Object to ObjectDataProvider
16.102.5.Use Path to reference Bounded object in ItemSourceUse Path to reference Bounded object in ItemSource