I have custom control with dependency property and binding to ViewModel property only works like OneWayToSource. What did I mess up?
Binding
<local:MyControl SelectedItem="{Binding SelectedPage}"/>
ViewModel and control
public class ViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private ViewModelPageBase _selectedPage;
public ViewModelPageBase SelectedPage
{
get { return _selectedPage; }
set
{
_selectedPage = value;
OnPropertyChanged();
}
}
public void OnPropertyChanged([CallerMemberName] string property = "")
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
}
public class MyControl : ContentControl
{
public object SelectedItem
{
get { return (object)GetValue(SelectedItemProperty); }
set
{
// never get here
SetValue(SelectedItemProperty, value);
}
}
public static readonly DependencyProperty SelectedItemProperty = DependencyProperty.Register(
"SelectedItem",
typeof(object),
typeof(MyControl),
new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
}
Earlier I was using ItemsControl and binding was working two-way. Now, with MyControl, only if SelectedItem is changed, then SelectedPage get updated. Other way (setting SelectedPage somewhere) doesn't update SelectedItem.
Ideas?