15

I have two controls on some panel: textbox and combobox:

<TextBox Text="{Binding ShapeName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" />

<ComboBox SelectedItem="{Binding ActiveStageViewModel, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" />

I need to force idataerrorinfo validation for textbox, when I select something on combobox. How to do that?

The code from viewmodel:

string IDataErrorInfo.this[string propertyName]
    {
      get
      {
        var error = string.Empty;

        if (propertyName == Expression.GetPropertyName(() => ActiveStageViewModel))
        {
          // TODO: Add functionality to force ShapeName property validation
          return error;
        }

        if (propertyName == Expression.GetPropertyName(() => ShapeName))
        {
          error = ValidateShapeName();
        }

        TooltipMessage = error;
        return error;
      }
    }
Witcher
  • 1,070
  • 2
  • 15
  • 38

2 Answers2

23

Just raise the NotifyPropertyChanged event for the property you want to validate or if you are in .NET 4.5 or Silverlight 4 use the INotityDataErrorInfo.

bitbonk
  • 48,890
  • 37
  • 186
  • 278
  • yea...NotifyPropertyChanged works) I have tried before, but forgot about two way mode... – Witcher Nov 14 '12 at 14:04
  • I've used [AlsoNotifyFor("ShapeName")] over ActiveStageViewModel – Martina May 30 '16 at 15:55
  • 1
    It kinda works... In my case I have a `TabControl` and in the last tab when user clicks save for the first time, I raise `NotifyPropertyChanged` and the error is shown. However, when I go back to other tab, and switch back again to the last tab, raising `NotifyPropertyChanged` does not work, no error template is shown. Any insights? – JobaDiniz Sep 14 '16 at 20:46
  • @JobaDiniz You have a solution to this yet? – EpicKip Sep 07 '18 at 08:44
  • 1
    @JobaDiniz Ok I found a solution in case you need it [so link](https://stackoverflow.com/questions/9907075/textbox-with-validation-loses-errortemplate-on-tab-change) – EpicKip Sep 07 '18 at 09:32
16

Worth remembering also that you can raise NotifyPropertyChanged with String.Empty property. This will force validation of all properties at that level. Can be useful at times.

Paul Marques
  • 604
  • 4
  • 15