XAML中的DataContext和Command在一起使用时不起作用

时间:2012-10-15 15:19:52

标签: xaml windows-8 microsoft-metro

我有一个按钮,当我使用datacontext和命令时,命令不起作用:

 <Button  DataContext="{Binding horaires}" Style="{StaticResource RefreshAppBarButtonStyle}" AutomationProperties.Name="{Binding HomeAppBarTitle, Converter={StaticResource StringResourceConverter}}"  Command="{Binding RefreshCommand}" ></Button>

当我删除datacontext并手动设置名称时,它的工作是:

<Button Style="{StaticResource RefreshAppBarButtonStyle}" AutomationProperties.Name="Actualiser"  Command="{Binding RefreshCommand}" ></Button>

可能是什么问题?

祝你好运

1 个答案:

答案 0 :(得分:1)

horaires是否有名为RefreshCommand的属性?我猜不是因为你说没有设置DataContext就可以了。

您需要删除DataContext绑定并更改AutomationProperties.Name属性绑定以使用horaires前缀,如下所示:

<Button  AutomationProperties.Name="{Binding horaires.HomeAppBarTitle, Converter={StaticResource StringResourceConverter}}"  
         Command="{Binding RefreshCommand}" />

或者使用RelativeSourceElementName绑定来查找在RefreshCommand中包含DataContext的UI元素。例如,

<Button  DataContext="{Binding horaires}"
         AutomationProperties.Name="{Binding HomeAppBarTitle, Converter={StaticResource StringResourceConverter}}"  
         Command="{Binding DataContext.RefreshCommand, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" />

就个人而言,我会选择第一个,因为我希望尽可能避免明确设置DataContext。 UI应该反映其背后的数据,并设置DataContext手动更改此层次结构。