如何将依赖属性绑定到XAML中的任何内容

时间:2010-07-09 18:40:49

标签: c# silverlight silverlight-4.0

(使用Silverlight 4.0和VS 2010)
所以我在C#文件中创建了一个名为Rank的属性。我现在如何将它绑定到UserControl xaml文件中的控件?

我的代码:(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)

我想在我的TopicListItem.xaml

中执行此操作
...
<Textblock Text="{TemplateBinding Rank}"/>
...

但这确实不起作用。

4 个答案:

答案 0 :(得分:5)

<UserControl xmlns..... 
    x:Name="myUserControl">

....

<Textblock Text="{Binding Rank,ElementName=myUserControl}"/>

....

</UserControl>

你需要将ElementName设置为x:UserControl的名称,如果x:Name为空,则定义一个。

答案 1 :(得分:5)

如果需要将Usercontrol的xaml中的属性绑定到由同一UserControl公开的属性,请使用以下模式: -

<TextBlock Text="{Binding Parent.Rank, ElementName=LayoutRoot}" />

请注意,这假设UserControl中的根内容元素已被赋予名称“LayoutRoot”。

答案 2 :(得分:1)

您需要使用Binding,而不是TemplateBinding,

此外,您可能希望了解如何获取向您报告的绑定错误 - WPF中非常有用的默认行为是让您猜测绑定问题,但如果您打开它,实际上可以获得大量有用的信息。

答案 3 :(得分:-1)

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