DevExpress v24.2 Update — Your Feedback Matters
Our What's New in v24.2 webpage includes product-specific surveys. Your response to our survey questions will help us measure product satisfaction for features released in this major update and help us refine our plans for our next major release.
Take the survey
Not interested
This example demonstrates cases of the DXBinding, DXCommand, and DXEvent markup extensions.
View Example: Use DXBinding, DXCommand, and DXEvent Extensions
<UserControl x:Class ="DXBindingExample.View.BasicExpressionsView"
xmlns ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x ="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc ="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d ="http://schemas.microsoft.com/expression/blend/2008"
xmlns:v ="clr-namespace:DXBindingExample.View"
xmlns:vm ="clr-namespace:DXBindingExample.ViewModel"
xmlns:dxmvvm ="http://schemas.devexpress.com/winfx/2008/xaml/mvvm"
mc:Ignorable ="d" d:DesignHeight ="600" d:DesignWidth ="800"
d:DataContext ="{dxmvvm:ViewModelSource vm:BasicExpressionsViewModel}" >
<StackPanel Orientation ="Vertical" >
<StackPanel Style ="{StaticResource groupPanelStyle}" >
<TextBlock Text ="ViewModel Properties" Style ="{StaticResource headerDescriptionStyle}" />
<TextBlock Text ="IntValue:" Style ="{StaticResource descriptionStyle}" />
<TextBox Text ="{DXBinding 'IntValue', UpdateSourceTrigger=PropertyChanged}" Style ="{StaticResource valueStyle}" />
<TextBlock Text ="DoubleValue:" Style ="{StaticResource descriptionStyle}" />
<TextBox Text ="{DXBinding 'DoubleValue', UpdateSourceTrigger=PropertyChanged}" Style ="{StaticResource valueStyle}" />
<TextBlock Text ="StringValue:" Style ="{StaticResource descriptionStyle}" />
<TextBox Text ="{DXBinding 'StringValue', UpdateSourceTrigger=PropertyChanged}" Style ="{StaticResource valueStyle}" />
<TextBlock Text ="BooleanValue:" Style ="{StaticResource descriptionStyle}" />
<CheckBox IsChecked ="{DXBinding 'BooleanValue', UpdateSourceTrigger=PropertyChanged}" Style ="{StaticResource valueStyle}" />
</StackPanel >
<StackPanel Style ="{StaticResource groupPanelStyle}" >
<TextBlock Text ="Arithmetic Operators" Style ="{StaticResource headerDescriptionStyle}" />
<TextBlock Text ="DXBinding Expr: 'IntValue+DoubleValue'." Style ="{StaticResource descriptionStyle}" />
<TextBox Text ="{DXBinding 'IntValue+DoubleValue', Mode=OneWay}" IsReadOnly ="True" Style ="{StaticResource valueStyle}" />
<TextBlock Text ="DXBinding Expr: 'StringValue+DoubleValue.ToString()'." Style ="{StaticResource descriptionStyle}" />
<TextBox Text ="{DXBinding 'StringValue+DoubleValue.ToString()', Mode=OneWay}" IsReadOnly ="True" Style ="{StaticResource valueStyle}" />
</StackPanel >
<StackPanel Style ="{StaticResource groupPanelStyle}" >
<TextBlock Text ="Comparison and Relational Operators " Style ="{StaticResource headerDescriptionStyle}" />
<TextBlock Text ="DXBinding Expr: 'IntValue eq(==) DoubleValue'." Style ="{StaticResource descriptionStyle}" />
<TextBox Text ="{DXBinding 'IntValue eq DoubleValue', Mode=OneWay}" IsReadOnly ="True" Style ="{StaticResource valueStyle}" />
<TextBlock Text ="DXBinding Expr: 'IntValue gt(>) DoubleValue'." Style ="{StaticResource descriptionStyle}" />
<TextBox Text ="{DXBinding 'IntValue gt DoubleValue', Mode=OneWay}" IsReadOnly ="True" Style ="{StaticResource valueStyle}" />
</StackPanel >
<StackPanel Style ="{StaticResource groupPanelStyle}" >
<TextBlock Text ="Logical Operators " Style ="{StaticResource headerDescriptionStyle}" />
<TextBlock Text ="DXBinding Expr: 'BooleanValue ? IntValue : DoubleValue'." Style ="{StaticResource descriptionStyle}" />
<TextBox Text ="{DXBinding 'BooleanValue ? IntValue : DoubleValue', Mode=OneWay}" IsReadOnly ="True" Style ="{StaticResource valueStyle}" />
</StackPanel >
</StackPanel >
</UserControl >
<UserControl x:Class ="DXBindingExample.View.RelativeSourcesView"
xmlns ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x ="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc ="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d ="http://schemas.microsoft.com/expression/blend/2008"
xmlns:v ="clr-namespace:DXBindingExample.View"
xmlns:vm ="clr-namespace:DXBindingExample.ViewModel"
xmlns:dxmvvm ="http://schemas.devexpress.com/winfx/2008/xaml/mvvm"
xmlns:sys ="clr-namespace:System;assembly=mscorlib"
mc:Ignorable ="d" d:DesignHeight ="600" d:DesignWidth ="800"
d:DataContext ="{dxmvvm:ViewModelSource vm:RelativeSourcesViewModel}" >
<StackPanel Orientation ="Vertical" >
<StackPanel Style ="{StaticResource groupPanelStyle}" >
<TextBlock Text ="ElementName Binding" Style ="{StaticResource headerDescriptionStyle}" />
<TextBlock Text ="DXBinding Expr: '@e(slider).Value'." Style ="{StaticResource descriptionStyle}" />
<Slider x:Name ="slider" Minimum ="0" Maximum ="100" Value ="50" Margin ="4,2,4,2" />
<TextBox Text ="{DXBinding '@e(slider).Value', UpdateSourceTrigger=PropertyChanged}" Style ="{StaticResource valueStyle}" />
</StackPanel >
<StackPanel Style ="{StaticResource groupPanelStyle}" >
<TextBlock Text ="Self Binding" Style ="{StaticResource headerDescriptionStyle}" />
<TextBlock Text ="DXBinding Expr: '@s.Width'." Style ="{StaticResource descriptionStyle}" />
<TextBox Text ="{DXBinding '@s.Width', UpdateSourceTrigger=PropertyChanged}" Style ="{StaticResource valueStyle}" Width ="80" HorizontalAlignment ="Left" />
</StackPanel >
<StackPanel Style ="{StaticResource groupPanelStyle}" >
<TextBlock Text ="FindAncestor Binding" Style ="{StaticResource headerDescriptionStyle}" />
<TextBlock Text ="DXBinding Expr: '@a($UserControl).DataContext.Value'." Style ="{StaticResource descriptionStyle}" />
<TextBox Text ="{DXBinding '@a($UserControl).DataContext.Value', UpdateSourceTrigger=PropertyChanged}" Style ="{StaticResource valueStyle}" />
</StackPanel >
<StackPanel Style ="{StaticResource groupPanelStyle}" >
<StackPanel.Resources >
<sys:Int32 x:Key ="resourceValue" > 42</sys:Int32 >
</StackPanel.Resources >
<TextBlock Text ="StaticResource Binding" Style ="{StaticResource headerDescriptionStyle}" />
<TextBlock Text ="DXBinding Expr: '@r(resourceValue)'." Style ="{StaticResource descriptionStyle}" />
<TextBox Text ="{DXBinding '@r(resourceValue)', Mode=OneTime}" IsReadOnly ="True" Style ="{StaticResource valueStyle}" />
</StackPanel >
</StackPanel >
</UserControl >
<UserControl x:Class ="DXBindingExample.View.StaticPropertiesView"
xmlns ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x ="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc ="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d ="http://schemas.microsoft.com/expression/blend/2008"
xmlns:v ="clr-namespace:DXBindingExample.View"
xmlns:vm ="clr-namespace:DXBindingExample.ViewModel"
xmlns:dxmvvm ="http://schemas.devexpress.com/winfx/2008/xaml/mvvm"
mc:Ignorable ="d" d:DesignHeight ="600" d:DesignWidth ="800"
d:DataContext ="{dxmvvm:ViewModelSource vm:StaticPropertiesViewModel}" >
<StackPanel Orientation ="Vertical" >
<StackPanel Style ="{StaticResource groupPanelStyle}" >
<TextBlock Text ="Binding to Attached Property" Style ="{StaticResource headerDescriptionStyle}" />
<TextBlock Text ="DXBinding Expr: '@e(tb).($v:AttachedPropertiesHelper.AttachedTitle)'." Style ="{StaticResource descriptionStyle}" />
<TextBlock x:Name ="tb" Text ="{DXBinding '@s.($v:AttachedPropertiesHelper.AttachedTitle)'}" Style ="{StaticResource descriptionStyle}" />
<TextBox Text ="{DXBinding '@e(tb).($v:AttachedPropertiesHelper.AttachedTitle)', UpdateSourceTrigger=PropertyChanged}" Style ="{StaticResource valueStyle}" />
</StackPanel >
<StackPanel Style ="{StaticResource groupPanelStyle}" >
<TextBlock Text ="Binding to Static Property" Style ="{StaticResource headerDescriptionStyle}" />
<TextBlock Text ="DXBinding Expr: '$int.MaxValue'." Style ="{StaticResource descriptionStyle}" />
<TextBox Text ="{DXBinding '$int.MaxValue', Mode=OneWay}" IsReadOnly ="True" Style ="{StaticResource valueStyle}" />
<TextBlock Text ="DXBinding Expr: '$v:StaticPropertiesHelper.StaticObject.Value'." Style ="{StaticResource descriptionStyle}" />
<TextBox Text ="{DXBinding '$v:StaticPropertiesHelper.StaticObject.Value', Mode=OneWay}" IsReadOnly ="True" Style ="{StaticResource valueStyle}" />
</StackPanel >
</StackPanel >
</UserControl >
<UserControl x:Class ="DXBindingExample.View.BindingToMethodView"
xmlns ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x ="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc ="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d ="http://schemas.microsoft.com/expression/blend/2008"
xmlns:v ="clr-namespace:DXBindingExample.View"
xmlns:vm ="clr-namespace:DXBindingExample.ViewModel"
xmlns:dxmvvm ="http://schemas.devexpress.com/winfx/2008/xaml/mvvm"
xmlns:sys ="clr-namespace:System;assembly=mscorlib"
mc:Ignorable ="d" d:DesignHeight ="600" d:DesignWidth ="800"
d:DataContext ="{dxmvvm:ViewModelSource vm:BindingToMethodViewModel}" >
<StackPanel Orientation ="Vertical" >
<StackPanel Style ="{StaticResource groupPanelStyle}" >
<TextBlock Text ="Binding To Function" Style ="{StaticResource headerDescriptionStyle}" />
<TextBlock Style ="{StaticResource descriptionStyle}" >
Function: int Sum(int x, int y) { return x + y; }
<LineBreak />
DXBinding Expr: 'Sum($int.Parse(@e(x).Text), $int.Parse(@e(y).Text))'.
</TextBlock >
<StackPanel Orientation ="Vertical" >
<TextBlock Text ="X: " />
<TextBox x:Name ="x" Text ="1" Style ="{StaticResource valueStyle}" />
<TextBlock Text ="Y: " />
<TextBox x:Name ="y" Text ="2" Style ="{StaticResource valueStyle}" />
<TextBlock Text ="Res: " />
<TextBox Text ="{DXBinding 'Sum($int.Parse(@e(x).Text), $int.Parse(@e(y).Text))', FallbackValue=0, Mode=OneWay}" IsReadOnly ="True" Style ="{StaticResource valueStyle}" />
</StackPanel >
</StackPanel >
</StackPanel >
</UserControl >
<UserControl x:Class ="DXBindingExample.View.TwoWayView"
xmlns ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x ="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc ="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d ="http://schemas.microsoft.com/expression/blend/2008"
xmlns:v ="clr-namespace:DXBindingExample.View"
xmlns:vm ="clr-namespace:DXBindingExample.ViewModel"
xmlns:dxmvvm ="http://schemas.devexpress.com/winfx/2008/xaml/mvvm"
xmlns:sys ="clr-namespace:System;assembly=mscorlib"
mc:Ignorable ="d" d:DesignHeight ="600" d:DesignWidth ="800"
d:DataContext ="{dxmvvm:ViewModelSource vm:TwoWayViewModel}" >
<StackPanel Orientation ="Vertical" >
<StackPanel Style ="{StaticResource groupPanelStyle}" >
<TextBlock Text ="Example #1" Style ="{StaticResource headerDescriptionStyle}" />
<TextBlock Style ="{StaticResource descriptionStyle}" >
DXBinding Expr: 'FirstName + ` ` + LastName'.
<LineBreak />
DXBinding BackExpr: 'FirstName = @v.Split(` `[0])[0]; LastName = @v.Split(` `[0])[1];'.
</TextBlock >
<StackPanel Orientation ="Vertical" >
<TextBlock Text ="FirstName: " />
<TextBox Text ="{DXBinding FirstName, UpdateSourceTrigger=PropertyChanged}" Style ="{StaticResource valueStyle}" />
<TextBlock Text ="LastName: " />
<TextBox Text ="{DXBinding LastName, UpdateSourceTrigger=PropertyChanged}" Style ="{StaticResource valueStyle}" />
<TextBlock Text ="FullName: " />
<TextBox
Text ="{DXBinding
Expr='FirstName + ` ` + LastName',
BackExpr='FirstName = @v.Split(` `[0])[0]; LastName = @v.Split(` `[0])[1];',
FallbackValue='', Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Style ="{StaticResource valueStyle}" />
</StackPanel >
</StackPanel >
<StackPanel Style ="{StaticResource groupPanelStyle}" >
<TextBlock Text ="Example #2" Style ="{StaticResource headerDescriptionStyle}" />
<TextBlock Style ="{StaticResource descriptionStyle}" >
Function: int Sum(int x, int y) { return x + y; }
<LineBreak />
DXBinding Expr: 'Sum($int.Parse(@e(x).Text), $int.Parse(@e(y).Text))'.
<LineBreak />
DXBinding BackExpr: '@e(x).Text = $int.Parse(@v); @e(y).Text = 0;'.
</TextBlock >
<StackPanel Orientation ="Vertical" >
<TextBlock Text ="X: " />
<TextBox x:Name ="x1" Text ="1" Style ="{StaticResource valueStyle}" />
<TextBlock Text ="Y: " />
<TextBox x:Name ="y1" Text ="2" Style ="{StaticResource valueStyle}" />
<TextBlock Text ="Res: " />
<TextBox
Text ="{DXBinding
Expr='Sum($int.Parse(@e(x1).Text), $int.Parse(@e(y1).Text))',
BackExpr='@e(x1).Text = $int.Parse(@v); @e(y1).Text = 0;',
FallbackValue=0, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Style ="{StaticResource valueStyle}" />
</StackPanel >
</StackPanel >
</StackPanel >
</UserControl >
<UserControl x:Class ="DXBindingExample.View.CommandView"
xmlns ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x ="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc ="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d ="http://schemas.microsoft.com/expression/blend/2008"
xmlns:v ="clr-namespace:DXBindingExample.View"
xmlns:vm ="clr-namespace:DXBindingExample.ViewModel"
xmlns:dxmvvm ="http://schemas.devexpress.com/winfx/2008/xaml/mvvm"
mc:Ignorable ="d" d:DesignHeight ="600" d:DesignWidth ="800"
d:DataContext ="{dxmvvm:ViewModelSource vm:CommandViewModel}" >
<StackPanel Orientation ="Vertical" >
<TextBlock Text ="Command Binding" Style ="{StaticResource headerDescriptionStyle}" />
<StackPanel Style ="{StaticResource groupPanelStyle}" >
<TextBlock Text ="MessageBox Title:" Style ="{StaticResource descriptionStyle}" />
<TextBox x:Name ="title" Text ="MessageBox" Style ="{StaticResource valueStyle}" />
<TextBlock Text ="MessageBox Message:" Style ="{StaticResource descriptionStyle}" />
<TextBox x:Name ="message" Text ="Command Executed!" Style ="{StaticResource valueStyle}" />
<TextBlock Text ="Is Command Enabled" Style ="{StaticResource descriptionStyle}" />
<CheckBox x:Name ="isEnabled" IsChecked ="True" Style ="{StaticResource valueStyle}" />
</StackPanel >
<StackPanel Style ="{StaticResource groupPanelStyle}" >
<TextBlock Text ="DXCommand Execute: '$MessageBox.Show(@e(message).Text, @e(title).Text)'." Style ="{StaticResource descriptionStyle}" />
<TextBlock Text ="DXCommand CanExecute: '@e(isEnabled).IsChecked'." Style ="{StaticResource descriptionStyle}" />
<Button Content ="Show MessageBox" HorizontalAlignment ="Left" Style ="{StaticResource valueStyle}"
Command ="{DXCommand
Execute='$MessageBox.Show(@e(message).Text, @e(title).Text)',
CanExecute='@e(isEnabled).IsChecked'}" />
</StackPanel >
</StackPanel >
</UserControl >
<UserControl x:Class ="DXBindingExample.View.EventView"
xmlns ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x ="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc ="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d ="http://schemas.microsoft.com/expression/blend/2008"
xmlns:v ="clr-namespace:DXBindingExample.View"
xmlns:vm ="clr-namespace:DXBindingExample.ViewModel"
xmlns:dxmvvm ="http://schemas.devexpress.com/winfx/2008/xaml/mvvm"
xmlns:sys ="clr-namespace:System;assembly=mscorlib"
mc:Ignorable ="d" d:DesignHeight ="600" d:DesignWidth ="800"
d:DataContext ="{dxmvvm:ViewModelSource vm:EventViewModel}" >
<UserControl.Resources >
<sys:String x:Key ="loadedBindingStringFormat" xml:space ="preserve" > This message is shown with this binding: {0}</sys:String >
<sys:String x:Key ="loadedBinding" > Loaded="{DXEvent '$MessageBox.Show(`text`, Title)'}"</sys:String >
<sys:String x:Key ="clickBindingStringFormat" xml:space ="preserve" > This message is shown with this binding: {0}</sys:String >
<sys:String x:Key ="clickBinding" > Click="{DXEvent '$MessageBox.Show(`text`, Title)'}"</sys:String >
</UserControl.Resources >
<StackPanel Orientation ="Vertical" Loaded ="{DXEvent '$MessageBox.Show($string.Format(@r(loadedBindingStringFormat), @r(loadedBinding)), Title)'}" >
<Button Content ="Show Message" Style ="{StaticResource valueStyle}" HorizontalAlignment ="Left"
Click ="{DXEvent '$MessageBox.Show($string.Format(@r(clickBindingStringFormat), @r(clickBinding)), Title)'}" />
</StackPanel >
</UserControl >