我的viewmodel附带View(XAML).当DataGrid的行上的按钮被点击时,我需要调用命令.我正在使用行为(正常命令有相同的问题).当我点击DataGrid上的按钮 – 我的命令没有被解雇.
为了说明问题 – 我将ListBox放在底部,与EXACT相同的绑定东西 – 是的,命令工作.所以,它是与DataGrid / DataGridTemplateColumn的东西
<Grid x:Name="LayoutRoot" Background="White" DataContext="{Binding}"> <Grid.RowDeFinitions> <RowDeFinition Height="30" /> <RowDeFinition Height="*" /> <RowDeFinition Height="*" /> </Grid.RowDeFinitions> <StackPanel Orientation="Horizontal"> <Button Content="Cancel" > <i:Interaction.Triggers> <i:EventTrigger EventName="Click"> <ei:CallMethodAction MethodName="Cancel" Targetobject="{Binding}"/> </i:EventTrigger> </i:Interaction.Triggers> </Button> </StackPanel> <sdk:DataGrid AutoGenerateColumns="False" IsReadOnly="True" ItemsSource="{Binding Data}" Grid.Row="1"> <sdk:DataGrid.Columns> <sdk:DataGridTemplateColumn CanUserReorder="True" CanUserResize="True" CanUserSort="True" Width="Auto"> <sdk:DataGridTemplateColumn.CellTemplate> <DataTemplate> <Button Content="Select"> <i:Interaction.Triggers> <i:EventTrigger EventName="Click"> <i:InvokeCommandAction Command="{Binding ElementName=Control,Path=DataContext.ItemSelectedCommand}" CommandParameter="{Binding}" /> </i:EventTrigger> </i:Interaction.Triggers> </Button> </DataTemplate> </sdk:DataGridTemplateColumn.CellTemplate> </sdk:DataGridTemplateColumn> <sdk:DataGridTextColumn Binding="{Binding deviceid}" CanUserReorder="True" CanUserResize="True" CanUserSort="True" Header="Device" Width="Auto" FontWeight="Bold" /> <sdk:DataGridTextColumn Binding="{Binding SerialNumber}" CanUserReorder="True" CanUserResize="True" CanUserSort="True" Header="Serial Number" Width="Auto" /> <sdk:DataGridTextColumn Binding="{Binding LastActivityOn}" CanUserReorder="True" CanUserResize="True" CanUserSort="True" Header="Last Activity" Width="Auto" /> <sdk:DataGridTextColumn Binding="{Binding ClientVersion}" CanUserReorder="True" CanUserResize="True" CanUserSort="True" Header="Client Version" Width="Auto" /> <sdk:DataGridTextColumn Binding="{Binding Osversion}" CanUserReorder="True" CanUserResize="True" CanUserSort="True" Header="OS Version" Width="Auto" /> </sdk:DataGrid.Columns> </sdk:DataGrid> <ListBox Grid.Row="2" ItemsSource="{Binding Data}"> <ListBox.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <TextBlock Text="{Binding deviceid}"></TextBlock> <Button Content="Select"> <i:Interaction.Triggers> <i:EventTrigger EventName="Click"> <i:InvokeCommandAction Command="{Binding ElementName=Control,Path=DataContext.ItemSelectedCommand}" CommandParameter="{Binding}" /> </i:EventTrigger> </i:Interaction.Triggers> </Button> </StackPanel> </DataTemplate> </ListBox.ItemTemplate> </ListBox> </Grid>
解决方法
我确实在一个DataGrid里,你仍然需要
DataContextProxy来绑定工作. ElementName绑定不起作用(是的,它适用于ListBox模板,但不适用于DataGrid,这是因为DataGridTemplateColumn不在视觉树中),即使在Silverlight 4中也是如此.
UPDATE
在Silverlight 5中,由于支持Ancestor绑定,DataGrid不需要DataContextProxy.
例
<Button Command="{Binding DataContext.CancelCommand,RelativeSource={RelativeSource AncestorType=sdk:DataGrid}}" />
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。