I think I agree more with first school you mentioned.
Sure I know what data I should have in my properties but if I am
creating a control for others to use then the validation makes some
sense and then using Me.Prop = prop might be the right choice, right?
Why? So what if you are making the control for others? Think about it for
a second. Microsoft makes all kinds of code for others to use, like the
System.Windows.Forms.Button class for example. Now, when you make an
instance of a button, it gets several properties already initialized. Are
those properties set by Microsoft using the private fields or the public
properties? I don't know for sure, but as the user, I don't care either. I
just know that when I instantiate a button, it has several properties that
already have default values. How those values got there has nothing to do
with how me, the user of the button, is going to use it.
Remember, we're only talking about initializing property values in your
constructor here, not the continued used of them by others. For
initialization, I'd say go to the private field value directly (because you
know how your own class's should be initialized) and when others use your
class, they have the public properties as their access points into your
private fields.
This is what building "black boxes" is all about and goes to the heart of
good object oriented design.
-Scott