How to bind a Dependency Property to anything in the XAML
Solution 1
If you need to bind a property in a Usercontrol's xaml to a property exposed by the same UserControl then use the following pattern:-
<TextBlock Text="{Binding Parent.Rank, ElementName=LayoutRoot}" />
Note that this makes the assumption that root content element inside the UserControl has been given the name "LayoutRoot".
Solution 2
<UserControl xmlns.....
x:Name="myUserControl">
....
<Textblock Text="{Binding Rank,ElementName=myUserControl}"/>
....
</UserControl>
You need to set ElementName to x:Name of UserControl, if x:Name is empty, define one.
Solution 3
You need to use Binding, not TemplateBinding,
Also you might want to look into how to get binding errors reported to you - the very helpful default behaviour in WPF is to leave you guessing about binding problems, but you can actually get lots of useful info if you turn it on.
JeroenEijkhof
Updated on June 04, 2022Comments
-
JeroenEijkhof almost 2 years
(Using Silverlight 4.0 and VS 2010)
So I have created a property calledRank
in my C# file. How do I now tie that to a control in the UserControl xaml file?My code: (TopicListItem.xaml.cs)
#region Rank (DependencyProperty) /// <summary> /// Rank /// </summary> public int Rank { get { return (int)GetValue(RankProperty); } set { SetValue(RankProperty, value); } } public static readonly DependencyProperty RankProperty = DependencyProperty.Register("Rank", typeof(int), typeof(TopicListItem), new PropertyMetadata(0, new PropertyChangedCallback(OnRankChanged))); private static void OnRankChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { ((TopicListItem)d).OnRankChanged(e); } protected virtual void OnRankChanged(DependencyPropertyChangedEventArgs e) { } #endregion Rank (DependencyProperty)
I want to do this in my TopicListItem.xaml
... <Textblock Text="{TemplateBinding Rank}"/> ...
but that doesn't really work.