Have you put a breakpoint in your setter to see if that is even being fired? Check that and also change your binding path to TwoWay binding to see if that is the issue.
<TextBox x:Name="textBox" HorizontalAlignment="Left" Height="23" Margin="86,44,0,0" TextWrapping="Wrap" Text="{Binding Path=BuyTh, Mode=TwoWay, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Top" Width="120"/>
WPF binding is extremely fickle. IDataErrorInfo is also a bit of a pain for client side validation.