简体   繁体   中英

How to bind a Dependency Property to anything in the XAML

(Using Silverlight 4.0 and VS 2010)
So I have created a property called Rank 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.

<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.

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".

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.

可能<Textblock Text="{Binding Rank}"/>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM