我正在开发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
Pivot
是PivotTestContent.ItemsSource = quizs;
quizs
List<>
WCCQuizText
是quizs = 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
答案 0 :(得分:2)
你是对的。它是由DataContext = this
引起的。通常,您的UserControl
会将上下文设置为WCCQuizText
的实例,但您会使用UserControl
的实例覆盖它。尝试删除该行,为UserControl
提供一些名称,然后在UserControl
内更改绑定,例如:
<UserControl x:Name="SomeName" ... >
....
<TextBlock ... Text="{Binding ElementName=SomeName, Path=SelectableButtonText}"
同样TextBlock
是显示控件,它始终是单向绑定,因此您可以跳过Mode=TwoWay