When you configure a binding you have to specify the data source and the data property.
In your example code, you specify the source property 'TextBlockVisible'
Visibility='{ Binding TextBlockVisible ,
Converter={StaticResource BoolVisibilityConverter}}'
<!-- No source set for binding -->
but you don't indicate the source itself. When there is no source specified the binding framework looks at the DataContext property for the source. Your TextBlocks don't have the DataContext set, so the binding framework examines the DataContext property on each parent element (until it reaches phone:PhoneApplicationPage )
As @Oleg points out, you haven't set the DataContext, which is why the binding is not working.
Since the TextBlockVisible property is a member of your page class you need to set in the page constructor.
public MainPage() {
InitializeComponent();
DataContext = this;
}
FWIW, properties like TextBlockVisible are usually kept in a separate ViewModel class. Then your setup code would be:
var vm = new ExampleViewModel();
DataContext = vm;