в дополнение к ответу ColinE может потребоваться немного изменить код, чтобы свойство зависимости зависело от данных времени разработки,
public string testMessage
{
get { return (string)GetValue(testMessageProperty); }
set { SetValue(testMessageProperty, value); }
}
public static readonly DependencyProperty testMessageProperty =
DependencyProperty.Register("testMessage", typeof(string), typeof(TestControl), new PropertyMetadata("test in a message", PropertyChangedCallback));
private static void PropertyChangedCallback(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
if (e.NewValue != null)
{
var c = (TestControl)sender;
// assign value to the TextBlock here
c.textBlock1.Text = e.NewValue.ToString();
}
}
и удалите привязку в вашем TextBlock Text="{Binding testMessage}"
.
Чтобы отобразить текст во время разработки, необходимо добавить DataContext во время разработки (например, как предложил ColinE),
<Grid x:Name="LayoutRoot" d:DataContext="{d:DesignInstance design:DesignMainViewModel, IsDesignTimeCreatable=True}">
<xxx:TestControl testMessage={Binding SomeText} />
</Grid>
Надеюсь, это поможет. :)
EDIT
На самом деле, как указал Колин, вам не нужен обратный вызов, если вы называете свой usercontrol и используете привязку ElementName вместо обычной привязки.
<UserControl x:Name="myUserControl" ...
Внутри TextBlock вы делаете
Text="{Binding testMessage, ElementName=myUserControl}"
Простое связывание с testMessage не будет работать, поскольку это свойство принадлежит пользовательскому элементу управления.