2013-02-13 105 views
1

如何在数据网格上左键单击只在选中某行时启用? 这里有一个例子:WPF DataGrid只在行上左键单击

<DataGrid> 
    <DataGrid.InputBindings> 
      <MouseBinding MouseAction="LeftDoubleClick" Command="{Binding LeftClickCommand}"/> 
    </DataGrid.InputBindings> 
</DataGrid> 

现在,当我点击DataGrid中也执行该命令没有行,但我只希望执行它,当我在一排点击。

回答

1

你可以测试选择的项目是空 这只是一种方式,也许有助于你 XAML:

 <Custom1:DataGrid IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding Persons}" SelectedItem="{Binding SelectedPerson}" > 
     <i:Interaction.Triggers> 
      <i:EventTrigger EventName="MouseDoubleClick"> 
       <Custom:EventToCommand CommandParameter="{Binding SelectedItem, ElementName=dg}" Command="{Binding AfficheCommand, Mode=OneWay}"/> 
      </i:EventTrigger> 
     </i:Interaction.Triggers> 

后面的代码:

private PersonModel _selectedPersons = new PersonModel(); 
    public PersonModel SelectedPerson 
    { 
     set 
     { 
      _selectedPersons = value; 
     } 
    } 
    public ICommand AfficheCommand 
    { 
     get 
     { 
      return new DelegateCommand(AfficheText); 
     } 
    } 

    private void AfficheText() 
    { 
     if(_selectedPersons != null) 
      MessageBox.Show(_selectedPersons.FirstName); 

     _selectedPersons = null; 
    } 

我知道这是不是最好的而是一种方式,直到你找到一个更好的主意;)

+0

这只适用于启动一次。因为如果我选择数据网格中的项目选定的值不为空。如果我点击数据网格背景,选定的项目也不为空。我可以重置为null或类似的东西? – user2025830 2013-02-13 13:39:04

+0

@ user2025830:您可以在命令完成时使_selectedPersons = null,我编辑我的代码 – Akrem 2013-02-13 13:57:12

+0

谢谢。这对我行得通 – user2025830 2013-02-13 14:10:34