Data binding with TX Text Control

TX Text Control .NET for WPF and TX Text Control .NET for Windows Forms offer a new concept of binding WPF.TextControl or TextControl to a button bar or any ribbon bar. The WPF.InputFormat or TextControl.InputFormat class represent all formatting attributes at the current text input position.

XAML data binding with TX Text Control .NET for WPF

One of the major motivations to port Windows Forms applications to WPF is WPF's powerful data binding capabilities using XAML. Using TX Text Control .NET for WPF, interface controls like buttons or dropdown menus of a Ribbon bar can be easily connected to TX Text Control without writing one line of C# or VB.NET code. The connection can be completely done in XAML, making such bindings quick, flexible and easy.

To implement WPF data binding, a target and a source is required. The target can be any public property or element which is derived from DependencyProperty. The source of a WPF binding can be any property or other objects.

An example:

A ToggleButton should visualize, whether the character formatting at the current input position is bold or not and it should change this state when the button is clicked. In this case, the target of the data binding is the IsChecked property of the ToggleButton. The source is the Bold property of the new TX Text Control WPF.InputFormat class. This class represents all formatting attributes at the current text input position. The properties of this class are updated automatically when the input position changes.

The following XAML code shows the ToggleButton and it's binding:

<ToggleButton Name="tbtnBold" Content="Bold" Focusable="False"
              IsChecked="{Binding
                ElementName=textControl1,
                Path=InputFormat.Bold, Mode=TwoWay}" />

The Mode attribute has been set to TwoWay in the Binding statement. This attribute specifies how the data flows between the source and the target. The following methods are available:

  • OneWay: The data flows from the source to target each time a change is made on the source.
  • TwoWay: The data flows from the source to target and vice versa each time a change is made on the source or target.
  • OneTime: The data flows from the source to target when the application is started.
  • OneWayToSource: The data flows from the target to source each time a change is made on the target.

In this sample, a textual ToggleButton is used and text can be changed when the button is checked. Also for this action we do not need any code behind and it can be done directly in XAML. A Trigger can be used to listen to the IsChecked property in order to change the text accordingly. If you bind the Value of the Content property, it must not be set as a parameter in the ToggleButton element directly:

<ToggleButton Name="tbtnBold" Focusable="False"
              IsChecked="{Binding
                ElementName=textControl1,
                Path=InputFormat.Bold, Mode=TwoWay}">

    <ToggleButton.Style>
        <Style TargetType="{x:Type ToggleButton}">
            <Setter Property="Content" Value="Bold"/>
            <Style.Triggers>
                <Trigger Property="IsChecked" Value="True">
                    <Setter Property="Content" Value="UnBold"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </ToggleButton.Style>

</ToggleButton>

Data binding with TX Text Control .NET for Windows Forms

The same functionality is available in the Windows Forms version as well. Windows Forms offers a similar way of binding properties to data sources or other properties. But the binding is not added in XAML (which is a concept of WPF), but the code itself. But the advantage is still valid: The presentation layer can be abstracted and no additional event handling is required to update the state of specific buttons or menu entries.

The TextControl.InputFormat class is available in the Windows Forms version as well. The properties of this class can be bound to other controls.

The following code shows how to bind a CheckBox that is displayed as a toggle button to the Bold property of the TextControl.InputFormat class:

checkBox1.DataBindings.Add("Checked", textControl1.InputFormat, "Bold", true, DataSourceUpdateMode.OnPropertyChanged);
CheckBox1.DataBindings.Add("Checked", TextControl1.InputFormat, "Bold", True, DataSourceUpdateMode.OnPropertyChanged)