2012-03-13 22 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中解決了這個問題。