Как правильно указать привязку к DependencyProperty
У меня возникла необходимость помещать экземпляр класса модели в UserControl через привязку:
<ctrl:ProjectControl Project="{Binding}" />
public partial class Project
{
public Project() { }
public int Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
}
Сделал это следующим образом:
public partial class ProjectControl : UserControl
{
public static readonly DependencyProperty ProjectDependencyProperty = DependencyProperty.Register(
name: "Project",
propertyType: typeof(Project),
ownerType: typeof(ProjectControl),
typeMetadata: new PropertyMetadata(new Project(), new PropertyChangedCallback(ChangeProjectProperty)));
public ProjectControl()
{
InitializeComponent();
DataContext = this;
}
public Project Project
{
get => GetValue(ProjectDependencyProperty) as Project;
set
{
SetValue(ProjectDependencyProperty, value);
}
}
private static void ChangeProjectProperty(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
(d as ProjectControl).Project = e.NewValue as Project;
}
}
Но на этом этапе возник вопрос: а как отобразить эти данные на view? Пытался сделать через привязку к Project, но безуспешно:
<TextBlock Text="{Binding Project.Title}" />
<TextBlock Text="{Binding Project.Description}" />
Далее пробовал убирать DataContext = this из конструктора ProjectControl, после этого ChangeProjectProperty начал срабатывать каждый раз при создании контрола (до этого не вызывался).