<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Title="XmlBinding" Height="325" Width="400">
<Window.Resources>
<local:AgeToForegroundConverter x:Key="ageConverter" />
</Window.Resources>
<StackPanel Name="stackPanel">
<ListBox ItemsSource="{Binding}" IsSynchronizedWithCurrentItem="True">
<ListBox.GroupStyle>
<x:Static Member="GroupStyle.Default" />
</ListBox.GroupStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock>
<TextBlock Text="{Binding XPath=@Name}" />
(age: <TextBlock Text="{Binding XPath=@Age}" Foreground="{Binding XPath=@Age, Converter={StaticResource ageConverter}}" />)
</TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<TextBlock>Name:</TextBlock>
<TextBox Text="{Binding XPath=@Name}" />
<TextBlock>Age:</TextBlock>
<TextBox Text="{Binding XPath=@Age}" Foreground="{Binding XPath=@Age, Converter={StaticResource ageConverter}}" />
<Button Name="birthdayButton">Birthday</Button>
</StackPanel>
</Window>
//File:Window.xaml.vb
Imports System
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.Collections.Generic
Imports System.Diagnostics
Imports System.Collections
Imports System.Data
Imports System.Data.OleDb
Imports System.ComponentModel
Imports System.Xml
Namespace WpfApplication1
Public Class AgeToForegroundConverter
Implements IValueConverter
Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.Convert
Debug.Assert(targetType Is GetType(Brush))
Dim age As Integer = Integer.Parse(value.ToString())
Return (If(age > 60, Brushes.Red, Brushes.Black))
End Function
Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.ConvertBack
Throw New NotImplementedException()
End Function
End Class
Public Partial Class Window1
Inherits Window
Private doc As XmlDocument
Public Sub New()
InitializeComponent()
doc = New XmlDocument()
doc.LoadXml("<Company xmlns='http://company.com'>" & vbCr & vbLf & " <Employee Name='A' Age='61' />" & vbCr & vbLf & " <Employee Name='B' Age='72' />" & vbCr & vbLf & " <Employee Name='C' Age='38' />" & vbCr & vbLf & "</Company>")
Dim manager As New XmlNamespaceManager(doc.NameTable)
manager.AddNamespace("sb", "http://company.com")
Binding.SetXmlNamespaceManager(stackPanel, manager)
Dim b As New Binding()
b.XPath = "/sb:Company/sb:Employee"
b.Source = doc
stackPanel.SetBinding(StackPanel.DataContextProperty, b)
AddHandler Me.birthdayButton.Click, AddressOf birthdayButton_Click
End Sub
Private Sub birthdayButton_Click(sender As Object, e As RoutedEventArgs)
Dim view As ICollectionView = CollectionViewSource.GetDefaultView(stackPanel.DataContext)
Dim person As XmlElement = DirectCast(view.CurrentItem, XmlElement)
person.SetAttribute("Age", (Integer.Parse(person.Attributes("Age").Value) + 1).ToString())
Console.WriteLine(person.Attributes("Name").Value)
Console.WriteLine(person.Attributes("Age").Value)
End Sub
End Class
End Namespace
|