Once again, while browsing StackOverflow.com, I came across a question from a user who needed to fix their ComboBox Binding. The user in question was Binding XML data in Key/Value pairs to the combo box, displaying the Key and wanted to retrieve the Value.

This was achieved using the following example;

My XML Test Data was saved as XMLFile1.xml;

xml version="1.0" encoding="utf-8"?>

<Colours>

  <Colour ID="1" Name="None" />

  <Colour ID="2" Name="Red" />

  <Colour ID="3" Name="White" />

Colours>

My XAML was;

<Window x:Class="MainWindow"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    Title="MainWindow" Height="74" Width="150">

    <Window.Resources>

        <XmlDataProvider x:Key="ColourData" Source="/XMLFile1.xml" XPath="Colours" />

    Window.Resources>

    <Grid>

        <ComboBox x:Name="cmbColour" HorizontalAlignment="Left" Margin="10,10,0,0" 

                  VerticalAlignment="Top" Width="120" DisplayMemberPath="@ID" 

                  ItemsSource="{Binding Source={StaticResource ColourData}, XPath=./Colour}" 

                  SelectedValuePath="@Name"

                  SelectedValue="{Binding SelectedColourValue}"

                  />

    Grid>

Window>

And finally my ViewModel was;

Imports System.ComponentModel

Imports System.Xml

 

Class MainWindow : Implements INotifyPropertyChanged

 

    Private _SelectedColourValue As String

    Public Property SelectedColourValue As String

        Get

            Return _SelectedColourValue

 

        End Get

        Set(value As String)

 

            If value.Equals(_SelectedColourValue) = False Then

 

                _SelectedColourValue = value

                RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("SelectedColourValue"))

 

            End If

 

        End Set

End Property

    Public Event PropertyChanged(sender As Object, e As PropertyChangedEventArgs) Implements INotifyPropertyChanged.PropertyChanged

 

    Public Sub New()

 

        ' This call is required by the designer.

        InitializeComponent()

 

        ' Add any initialization after the InitializeComponent() call.

        me.DataContext = Me

 

    End Sub

End Class

This successfully displayed the ID property in the ComboBox, and when selected the “SelectedColourValue” Property held the Value.

By |2013-01-24T17:15:00+00:00January 24th, 2013|Binding, MVVM, VB.net, WPF, XML|0 Comments

About the Author:

Leave A Comment