WPF XAML Data Binding
Binding a String in the ViewModel to a TextBox in the View
Section titled “Binding a String in the ViewModel to a TextBox in the View”SampleViewModel.vb
'Import classes related to WPF for simplicityImports System.Collections.ObjectModelImports System.ComponentModel
Public Class SampleViewModel Inherits DependencyObject 'A class acting as a ViewModel must inherit from DependencyObject
'A simple string property Public Property SampleString as String Get Return CType(GetValue(SampleStringProperty), String) End Get
Set(ByVal value as String) SetValue(SampleStringProperty, value) End Set End Property
'The DependencyProperty that makes databinding actually work 'for the string above Public Shared ReadOnly SampleStringProperty As DependencyProperty = _ DependencyProperty.Register("SampleString", _ GetType(String), GetType(SampleViewModel), _ New PropertyMetadata(Nothing))
End ClassA DependencyProperty can be easily added by using the wpfdp code snippet (type wpfdp, then press the TAB key twice), however, the code snippet is not type safe, and will not compile under Option Strict On.
SampleWindow.xaml
<Window x:Class="SampleWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:des="http://schemas.microsoft.com/expression/blend/2008" DataContext="{Binding}" Loaded="Window_Loaded"> <Grid> <TextBox> <TextBox.Text> <Binding Path="SampleString" /> </TextBox.Text> </TextBox> </Grid></Window>SampleWindow.xaml.vb
Class SampleWindow
Private WithEvents myViewModel As New SampleViewModel()
Private Sub Window_Loaded(sender As Object, e As RoutedEventArgs) Me.DataContext = myViewModel End SubEnd ClassNote that this is a very rudimentary way to implement MVVM and databinding. A more robust practice would be to use a platform like Unity to “inject” the ViewModel into the View.