Pivot中的用户控件,绑定不起作用

时间:2014-01-11 17:02:56

标签: c# windows-phone-7 data-binding windows-phone-8

我正在开发windows phone 8 app。我有一个名为UserControl的客户SelectableButton。它的构造函数如下:

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
                );

现在我在SelectableButton中使用此Pivot。我想将SelectableButtonText属性绑定到某些数据。这是名为DataTemplate的{​​{1}}中使用的Pivot

PivotTestContent

<ShareControl:SelectableButton SelectableButtonText="{Binding question}" ... > </ShareControl:SelectableButton> 来自question的{​​{1}}:

ItemsSource

PivotPivotTestContent.ItemsSource = quizs;

quizs
List<>

WCCQuizTextquizs = new List<WCCQuizText>(); 的属性成员:

question

完成所有这些工作后,我发现WCCQuizText无法找到属性public String question { get; set; } 。似乎因为Binding的构造函数中的这一行:

question

Binding将在类SelectableButton中查找属性DataContext = this; ,而不是question。因为如果我将SelectableButton直接绑定到某些ItemsSouce,它就会起作用。但是当我将它绑定到我的UserControl时,无法找到它。 所以任何人都知道如何处理这个问题?


如果我这样做,我可以正确显示绑定文本,TextBlock也在Pivot中。

question

我的约束力:

TextBlock.Text

1 个答案:

答案 0 :(得分:2)

你是对的。它是由DataContext = this引起的。通常,您的UserControl会将上下文设置为WCCQuizText的实例,但您会使用UserControl的实例覆盖它。尝试删除该行,为UserControl提供一些名称,然后在UserControl内更改绑定,例如:

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

同样TextBlock是显示控件,它始终是单向绑定,因此您可以跳过Mode=TwoWay