Q:

Should I write the code for OnPropertyChanged and BooleanToVisibilityConverter?

I don't get it. I've been following some tutorials and reading some articles online and sometimes OnPropertyChanged is used without even writing the code for it.
            PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(name));
        }

and as for BooleanToVisibilityConverter, I find users creating it like this:
 public class BoolToVisibilityConverter : IValueConverter
    {
        public object Convert(object value, Type targetType,
            object parameter, CultureInfo culture)
        {
            return (bool)value ? Visibility.Visible : Visibility.Hidden;
        }

        public object ConvertBack(object value, Type targetType,
            object parameter, CultureInfo culture)
        {
            return (Visibility)value == Visibility.Visible;
        }
    }

but when I'm writing Converter={StaticResource ....} BooleanToVisibilityConverter shows up without even having the code above. So my question is, are these functions somewhere in a library or you have to write them yourself.

A:

The example you show is using Hidden if false. The built-in converter is Collapsed if false. 
This is my opinion, but I think many create their own because it affords them the ability to add in extra functionality. Myself, I have always created my own and used the parameter so that I may control what comes back if false.

I don't quite follow your PropertyChanged question. 
If PropertyChanged is null, then your handler will be null and it won't execute. You don't need to write any other code. WPF behind the scenes hooks into it. You don't have to do anything other than call it to signal you've updated the property. WPF knew to hook into it because it saw INotifyPropertyChanged on your object.
I hope that makes sense.

