Where to raise NotifyPropertyChanged?
===

I just implemented my business logic validation according to Rachel Lim's [blog][1].
Everything was running great until I decided to put a trigger in my view bound to the **IsValid** property like this:

    <ListBox ItemsSource="{Binding EdgedBoards}" SelectedItem="{Binding SelEdgedBoard, Mode=TwoWay}" DisplayMemberPath="Name"> 
                        <ListBox.ItemContainerStyle>
                            <Style TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource {x:Type ListBoxItem}}">
                                <Setter Property="Focusable" Value="True" />
                                <Style.Triggers>
                                    <DataTrigger Binding="{Binding Path=IsValid}" Value="False">
                                        <Setter Property="Focusable" Value="False" />
                                    </DataTrigger>
                                </Style.Triggers>
                            </Style>
                        </ListBox.ItemContainerStyle>
                    </ListBox>
The problem is that when the bound item has an error (SelEdgedBoard.IsValid == false) the trigger is not notified to reevaluate and the item keeps its focusable property to true.

I've already tried to put a NotifyPropertyChanged("IsValid") before the GetValidationError() returns its value, but this way I get a stackoverflow exception:

    #region IsValid Property

        public bool IsValid
        {
            get
            {
                return string.IsNullOrWhiteSpace(GetValidationError());
            }
        }

        public string GetValidationError()
        {
            string error = null;

            if (ValidatedProperties != null)
            {
                foreach (string s in ValidatedProperties)
                {
                    error = GetValidationError(s);
                    if (!string.IsNullOrWhiteSpace(error))
                    {
                        break; 
                    }
                }
            }

            NotifyPropertyChanged("IsValid");
            return error;
        }

        #endregion



  [1]: http://rachel53461.wordpress.com/2012/01/22/validating-business-rules-in-mvvm/