Для привязок нужны свойства зависимостей, чтобы сформировать «склейку» между свойствами в привязках вашего шаблона и свойствами в моделях представления, с которыми вы связываетесь.Это означает, что у вас есть следующие варианты: 1) использовать TemplateBinding для привязки через существующие свойства в родительском шаблоне, 2) создать пользовательский элемент управления с отсутствующими дополнительными свойствами или 3) использовать присоединенные свойства:
<Window.Resources>
<ControlTemplate x:Key="MyTemplate" TargetType="{x:Type Control}">
<TextBlock Text="{Binding Path=(local:AttachedProps.Name), Mode=OneWay,
RelativeSource={RelativeSource TemplatedParent}}" />
</ControlTemplate>
</Window.Resources>
<Control Template="{StaticResource MyTemplate}"
local:AttachedProps.Name="{Binding MyViewModelName, Mode=OneWay}" />
Итогда вы бы сами создали прикрепленное свойство так:
public static class AttachedProps
{
#region Name
public static string GetName(DependencyObject obj)
{
return (string)obj.GetValue(NameProperty);
}
public static void SetName(DependencyObject obj, string value)
{
obj.SetValue(NameProperty, value);
}
public static readonly DependencyProperty NameProperty =
DependencyProperty.RegisterAttached("Name", typeof(string),
typeof(AttachedProps), new PropertyMetadata(String.Empty));
#endregion Name
}