1

How to bind RichTextBox to a flag (true/false value). For example i want the flag to be true if the text in the RTB is edited. And also the binding should be two-way.

Akarsha
  • 163
  • 1
  • 7

1 Answers1

1

You have to use two things to solve your problem.

You have to add System.Windows.Interactivity reference and use this link in your xaml:

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"

Here is an xaml (view part) example:

<Window ...
 xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity">
...
<RichTextBox>
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="TextChanged">
            <i:InvokeCommandAction Command="{Binding TextChangedCommand}"
                                   x:Name="textChangedCommand" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
</RichTextBox>
...

After this, you have to use an ICommand implementation in your ViewModel:

Here is a simple example to use in "ViewModel" part:

public partial class MainWindow : Window
{
    RelayCommand _textChangedCommand;
    public RelayCommand TextChangedCommand
    {
        get
        {
            if (_textChangedCommand == null)
                _textChangedCommand = new RelayCommand(() => IsEdited = true);

            return _textChangedCommand;
        }
    }

    private bool _isEdited;
    public bool IsEdited

    {
        get
        {
            return _isEdited;
        }
        set
        {
            _isEdited = value;
        }
    }

    public MainWindow()
    {
        InitializeComponent();
        //Use the following code if you want to use xaml.cs as ViewModel but It is not recommended, it is not correct MVVM pattern only simple example.
        DataContext = this;         
    }
}

There are several way to implement the ICommand interface.

Here you can find one with description.

Péter Hidvégi
  • 743
  • 6
  • 21