2010-07-27 92 views
0

在这个示例中,我有两个按钮。标题中的按钮有效,但网格中的按钮会显示下面的错误信息。WPF:数据网格按钮的命令绑定

<GroupBox DockPanel.Dock="Top" > 
    <GroupBox.Header> 
     <StackPanel Orientation="Horizontal"> 
      <Label Content="Recent Servers" /> 
      <CheckBox Content="Auto-Refresh" /> 
      <Button Content="Monitor" Command="{Binding MonitorCommand, ElementName=Top}" CommandParameter="{Binding}" /> 
     </StackPanel> 
    </GroupBox.Header> 
    <DataGrid CanUserAddRows="False" CanUserDeleteRows="False" AutoGenerateColumns="False" ItemsSource="{Binding ServerHistory}" > 
     <DataGrid.Columns> 
      <DataGridTextColumn Header="Machine Name" Binding="{Binding DataPoints[ServerName], Mode=OneWay}" /> 
      <DataGridTextColumn Header="Last Heartbeat" Binding="{Binding DataPoints[LastHeartbeat], Mode=OneWay}"/> 
      <DataGridTemplateColumn Header="Monitor"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <Button Content="Monitor" Command="{Binding MonitorCommand, ElementName=Top}" CommandParameter="{Binding}" /> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
     </DataGrid.Columns> 
    </DataGrid> 
</GroupBox> 

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'ElementName=Top'. BindingExpression:Path=MonitorCommand; DataItem=null; target element is 'Button' (Name=''); target property is 'Command' (type 'ICommand')

+0

[绑定到数据网格中的命令]可能的重复(http://stackoverflow.com/questions/581715/binding-to-a-command-in-a-datagrid) – 2010-07-28 03:07:42

+0

不知道它是否有帮助,但我发现这个: http://stackoverflow.com/questions/581715/binding-to-a-command-in-a-datagrid – user695663 2012-06-21 22:12:13

回答

0

我相信这是因为你的第二个按钮被封装成一个模板的一部分。请改为点击事件,在后面的代码中抓取它,并尝试找出发件人与数据的关系,然后发出命令触发器。

+1

我找到了答案:http://stackoverflow.com/questions/581715/绑定到一个命令在数据网格/ 581778#581778 – 2010-07-28 03:07:19

+0

啊,这似乎是一个更好的解决方案。 – keyle 2010-07-28 03:42:26

+0

http://stackoverflow.com/questions/581715/binding-to-a-command-in-a-datagrid看看这个。 – user695663 2012-06-21 22:12:29