2012-03-13 51 views
0

我的数据网格的鳕鱼e是如下查找在WPF数据网格的按钮控制点击的SelectionChanged

 <my:DataGrid Name="dgSupplierList" SelectionMode="Single" CanUserResizeColumns="False" CanUserResizeRows="False" 
       Margin="10,10,10,10" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" GridLinesVisibility="All" Background="Transparent" 
       RowHeight="23" RowBackground="White" AlternatingRowBackground="AliceBlue" SelectionUnit="FullRow" ColumnHeaderHeight="25" 
       OverridesDefaultStyle="True" SelectionChanged="dgSupplierList_SelectionChanged" Grid.Row="1"> 
      <my:DataGrid.RowStyle> 
       <Style TargetType="my:DataGridRow"> 
        <Style.Triggers> 
         <Trigger Property="IsSelected" Value="True"> 
          <Setter Property="Background" Value="White"/> 
          <Setter Property="Foreground" Value="White"/> 
         </Trigger> 
        </Style.Triggers> 
       </Style> 
      </my:DataGrid.RowStyle> 
      <my:DataGrid.Columns> 
       <my:DataGridTextColumn Binding="{Binding SupplierId}" Header="Supplier ID" Visibility="Hidden" ></my:DataGridTextColumn> 
       <my:DataGridTextColumn Binding="{Binding FullName}" Header="Organization" Width="225" IsReadOnly="True"></my:DataGridTextColumn> 
       <my:DataGridTextColumn Binding="{Binding ChartName}" Header="Chart Name" Width="150" IsReadOnly="True"></my:DataGridTextColumn> 
       <my:DataGridTextColumn Binding="{Binding ORG_ID}" Header="ID" Width="50" IsReadOnly="True"></my:DataGridTextColumn> 
       <my:DataGridTextColumn Binding="{Binding Country}" Header="Country" Width="125" IsReadOnly="True"></my:DataGridTextColumn> 
       <dg:DataGridTemplateColumn x:Name="AddStakeholders" Width="100" Header="Add Stakeholders" CanUserResize="False"> 
        <dg:DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <Button Background="Transparent" BorderBrush="Transparent" Height="25" Tag="{Binding SupplierId}" CommandParameter="{Binding SupplierId}" Name="btnAdd" Click="btnAdd_Click" > 
           <Image Stretch="Uniform" Margin="0,0,0,0" Source="/ADES;component/Images/addimage.jpg" /> 
          </Button> 
         </DataTemplate> 
        </dg:DataGridTemplateColumn.CellTemplate> 
       </dg:DataGridTemplateColumn> 
      </my:DataGrid.Columns> 

     </my:DataGrid> 

当按钮btnAdd点击它调用的方法背后的代码btnAdd_Click。但是由于数据网格中的按钮,在执行btnAdd_Click方法之前,执行dgSupplierList_SelectionChanged。如果单击btnAdd,我想跳过执行dgSupplierList_SelectionChanged的代码块。我怎样才能做到这一点 ?

我该如何检查是否点击btnAdd控件里面的dgSupplierList_SelectionChanged,以便我可以跳过它的代码。

+0

试图获得鼠标坐标控制? – Daanvl 2012-03-14 14:12:18

回答

0

一对夫妇黑客:

  1. 删除点击事件,在您的OnSelectionChanged旅行的视觉树看到的TextBlock和按钮, 类型差异,如果它是一个按钮,做你的特殊的逻辑有。

  2. 在DataGrid中添加Mouse.PreviewMouseDown =“OnPreviewMouseDown”... 它会在Click或SelectionChanged之前触发...因此您可以在其中添加逻辑。

  3. 清洁

    将绑定:

    DataGrid的的SelectedItem = “{结合MySelectedItem}”

    按钮的Command = “{绑定命令}”

    这样既得到您的视图模型不管设置,或代码背后你可以说,干草,如果我选择的项目是这样的,我不会执行命令

0

您的回答actual虽然为我工作,但我不能因为堆栈溢出优点规则而增加它:-)。我遇到的问题是我不得不按两次按钮才能让它发出命令。一次用于行选择,一次用于按下按钮。

通常情况下,我只想将数据绑定网格内的命令,它会工作,

<Button Style="{StaticResource LinkButton}" Content="Remove" Command="{Binding DataContext.RemoveCommand, Source={StaticResource ProxyElement}}" CommandParameter="{Binding}" /> 

但正如上面,没有工作。这个是我不得不做的。

<Button PreviewMouseDown="UIElement_OnPreviewMouseDown" Style="{StaticResource LinkButton}" Content="Remove" /> 

    private void UIElement_OnPreviewMouseDown(object sender, MouseButtonEventArgs e) { 
    ViewModel.RemoveCommand.Execute(((sender as Button).DataContext)); 
    } 

这做了在数据网格中的伎俩,但它当然不是一个伟大的MVVM解决方案,并伤害了我,甚至必须这样做。我使用WPF 3.5,所以也许MS在WPF 4.0中解决了这个问题。