2010-07-09 52 views
3

(使用Silverlight 4.0和VS 2010)
所以我在我的C#文件中創建了一個名爲Rank的屬性。我現在如何將它與UserControl xaml文件中的控件綁定?如何將依賴項屬性綁定到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}"/> 
... 

但是,這並不真正發揮作用。

回答

5

如果你需要在一個UserControl的XAML的屬性綁定到由同一用戶控件暴露的屬性,然後使用以下模式: -

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

注意,這使得假設用戶控件內部根內容元素已被命名爲「LayoutRoot」。

+0

與Akash相同嗎? – JeroenEijkhof 2010-07-12 21:08:06

+0

謝謝安東尼......這實際上工作,而阿卡什沒有,所以這些閱讀此請查看評論阿卡什回答推理爲什麼他的失敗。這個UserControl實際上是一個孩子和列表的一部分...再次感謝:) – JeroenEijkhof 2010-07-12 22:11:32

+0

安東尼,我想讀更多關於這個,特別是什麼邏輯/原因背後的某些東西,如'Parent.'和'ElementName = '......謝謝! – JeroenEijkhof 2010-07-12 22:31:10

-1

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

+0

沒有工作...''ElementName = ...'需要。 – JeroenEijkhof 2010-07-13 00:11:57

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

.... 

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

.... 

</UserControl> 

您需要將ElementName設置爲x:UserControl的名稱,如果x:Name爲空,則定義一個。

+1

如果'UserControl'只能用作RootVisual或導航頁面,這可以正常工作。但是,如果將其用作子控件,則此方法可能會失敗,因爲'UserControl'名稱可能會由外部xaml重新分配。 – AnthonyWJones 2010-07-10 19:46:35

+0

我沒有注意到這樣的事情,其他方式是將相對源指定爲自己。 – 2010-07-11 07:43:08

+0

這不起作用,因爲該名稱需要位於UserControl內的根UIElement而不是UserControl本身。 – JeroenEijkhof 2010-07-13 00:11:07

1

您需要使用綁定,不TemplateBinding,

而且你可能要考慮如何讓向您報告綁定錯誤 - 在WPF中非常有幫助的默認行爲是要離開你猜測的結合問題,但如果你打開它,你實際上可以獲得很多有用的信息。

+0

感謝您的提示。我怎樣才能做到這一點? – JeroenEijkhof 2010-07-12 21:06:04

+0

在VS2010中,有工具 - >選項 - >調試 - >輸出窗口中的選項。不確定早期版本,但您可以使用PresentationTraceSources在代碼中調出燈芯 - 這對Google來說可能是一個很好的術語。 – 2010-07-13 10:24:46

相關問題