【发布时间】:2013-06-17 12:03:08
【问题描述】:
我有一个有几个按钮的 GridView。其中之一由以下模板定义:
<DataTemplate x:Name="SubjectItemTemplate">
<Canvas Width="340" Height="170" VerticalAlignment="Top">
<Controls:ThreeImageButton HorizontalAlignment="Center" VerticalAlignment="Top" Margin="0,0,0,0"
NormalStateImageSource="{Binding NormalImage}"
HoverStateImageSource="{Binding HoverImage}"
PressedStateImageSource="{Binding PressedImage}" Command="{Binding Path=NavigateToUnitsPage}"
CommandParameter="{Binding}" Canvas.Left="0" Canvas.Top="0">
</Controls:ThreeImageButton>
</Canvas>
</DataTemplate>
现在我有一个自定义控件,如您所见,名为 ThreeImageButton。当我单独使用该按钮时,它可以正常工作。但是当我在 DataTemplate 中有它时,它不会将属性绑定到后面的代码。
现在,我有
x:Name="MyThreeImageButton"
在自定义按钮定义中。我像这样连接到代码隐藏:
<TextBlock Text="{Binding ElementName=MyThreeImageButton, Path=NormalStateImageSource}"/>
(这只是显示文本的测试,在实际代码中,我会将图像源分配给元素引用的另一个属性)。
现在,TextBlock 中没有显示任何内容。我应该使用什么正确的绑定语法来访问我的属性?
谢谢!
编辑:我在 InitializeComponent 函数中设置变量,并在 DependencyProperty 上使用 SetValue。
编辑:让我添加以下信息更清楚
场景一: 在 GridView 的 DataTemplate 中:
<UserControl CustomParameter="Literal Text">
在用户控件中:
<TextBlock Text="{Binding CustomParameter}">
在 UserControl .cs 中:this.DataContext = this 有效!
场景二: 在 GridView 的 DataTemplate 中:
<UserControl CustomParameter="{Binding ValueFromDataItem">
在用户控件中:
<TextBlock Text="{Binding CustomParameter}">
在 UserControl .cs 中:this.DataContext = this 不!
【问题讨论】:
-
没人知道吗?
-
我假设您在某种列表中使用了
DataTemplate。然后将模板的DataContext设置为它所代表的项目。因此,您必须以不同的方式指定绑定源。例如。使用静态/动态资源或相对来源。 -
你试过从cs文件设置绑定吗?
-
您在 UserControl 中的属性只是属性吗?还是它们是 DependencyProperties?另外,您使用的是 Mvvm,对吗?你不能只绑定到虚拟机中的命令吗?如果 VM 在 Item(数据上下文)中,那么您可以通过 Path 直接访问它。似乎情况并非如此。命令是控件本身的属性吗?如果是这种情况,您可以使用 RelativeSource Self,尽管这不是建议的方法。
-
我想在我的网格视图中显示按钮。按钮由特定项目(SubjectItem 类)表示。在这个类中,我设置了不同按钮图像的来源。在自定义按钮类中,我当然可以直接绑定到 SubjectItem 类。但是那样会消除很多灵活性。我希望能够在 SubjectItemTemplate(上图)中设置按钮图像源,以便我可以从 SubjectItem 传递源(
)或者我可以手动输入一些东西
标签: c# xaml windows-8 windows-store-apps winrt-xaml