Data Binding -- good idea done badly, or bad idea implemented as well as can be hoped?
The promise of data binding is that you can write your XAML UI code in one file, and then with a little bit of typing hook up the UI to your underlying data structures. Which is great, until you have to do anything at all complex (e.g.,: I have a list of data, and I want a UI- of all the data except for a subset of data that isn't right.
Worse, you get weird problems with data binding. When you make a UserControl, you can just set up some public properties; the internals of your control bind to the properties, and everything is great. Except you can't use a binding expression to set the values, and if you used the convenience this.DataContext = this in your constructor, you can't use binding to set common properties like 'Width' or 'Tags' any more.
Jerry Nixon has the answer in his Blog from 2013.
Short answer: use DependencyProperties and set (this.Content as FrameworkElement).DataContext = this; after you have this.InitializeComponent();'d.