2014-01-11 49 views
1

我正在開發windows phone 8應用程序。我有一個客戶UserControlSelectableButton。它的構造函數如下:樞軸中的用戶控件,綁定不起作用

public SelectableButton() 
{ 
    InitializeComponent(); 
    DataContext = this; 
} 

它的XAML是這樣的:

<Grid>  
    <TextBlock x:Name="ButtonTextBlock"     
     Text="{Binding SelectableButtonText, Mode=TwoWay}" 
     SomeOtherCode 
    /> 
    ... 
</Grid>  

SelectableButtonText是這個UserControl的屬性:

public static readonly DependencyProperty SelectableButtonTextProperty = 
DependencyProperty.Register(
       "SelectableButtonText", typeof(string), 
       typeof(SelectableButton), 
       null 
       ); 

現在我用這個SelectableButtonPivot中。我想將SelectableButtonText屬性綁定到某些數據。這是一個Pivot使用的DataTemplate稱爲PivotTestContent

<ShareControl:SelectableButton 
    SelectableButtonText="{Binding question}" 
    ... 
    > 
</ShareControl:SelectableButton> 

question是從這個PivotItemsSource

PivotTestContent.ItemsSource = quizs; 

quizsWCCQuizText

quizs = new List<WCCQuizText>(); 

而一個List<>questionWCCQuizText屬性成員:

public String question 
{ 
    get; 
    set; 
} 

畢竟這些工作,我發現Binding不能找物業question。看來,因爲這條線的SelectableButton構造函數:

DataContext = this; 

的結合將尋找物業questionSelectableButton類,而不是從ItemsSouce。因爲如果我將question直接綁定到某個TextBlock.Text,它將起作用。但是當我將它綁定到我的UserControl時,找不到它。 那麼有人知道如何處理這個?


如果我這樣做,我可以正確顯示綁定文本,TextBlock也在Pivot中。

<TextBlock 
     Name="TextBlockQuestion" 
     Text="{Binding question}" 
     .... 
     > 
    </TextBlock> 

我的綁定:

<ShareControl:SelectableButton 
    SelectableButtonText="{Binding Text, ElementName=TextBlockQuestion}" 
    .... 
    > 
</ShareControl:SelectableButton> 

回答

2

你是正確的。這是由DataContext = this引起的。通常,您的UserControl將上下文設置爲WCCQuizText的實例,但是您將用UserControl的實例覆蓋它。嘗試刪除線,給UserControl一些名稱,並更改綁定,內UserControl,喜歡的東西:

<UserControl x:Name="SomeName" ... > 
    .... 
    <TextBlock ... Text="{Binding ElementName=SomeName, Path=SelectableButtonText}" 

TextBlock是顯示控制,這將永遠是一個雙向綁定,所以你可以跳過Mode=TwoWay

+0

您好@dkozl,感謝您的快速回復。爲什麼我添加DataContext = this;在我的usercontrol的構造函數中是因爲我必須將一些控件的屬性綁定到它的DependencyProperties,而不僅僅是Text。所以我想如果我刪除這一行,我必須在xaml中做一些工作。有什麼建議麼? – Vigor

+0

如果你刪除'DataContext = this;'給UserControl一個名字,那麼你就可以象'SelectableButtonText'那樣通過'ElementName'來綁定其他的控件屬性。這就是你如何保持當前'DataContext'並且仍然綁定'UserControl'屬性。 – dkozl

+0

嗨@dkozl,我想我知道你的意思吧!非常感謝你。 – Vigor