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?