在DataGridTemplateColumn中为Image处理MouseLeftButtonDown事件。

15 浏览
0 Comments

在DataGridTemplateColumn中为Image处理MouseLeftButtonDown事件。

在我的DataGrid中,我有一列包含一个像这样创建的Image:


    
        
            
                                
    

为了在我的ViewModel中处理来自View的事件,我使用了以下命名空间:

xmlns:intr="http://schemas.microsoft.com/expression/2010/interactivity"

在普通的Image上,我可以这样处理事件:


    
        
            
        
    

这样可以正常工作,但是当我将相同的代码添加到我的DataGridTemplateColumn中的Image中时,似乎不起作用:


    
        
            
                
                    
                        
                    
                
            
                                
    

我也尝试了在这里找到的方法:https://www.codeproject.com/Tips/478643/Mouse-Event-Commands-for-MVVM

但也无法在DataGridTemplateColumn中的Image上工作。

我的ViewModel如下:

class vmCompaniesList: vmBase, INotifyPropertyChanged
{
    public DataView CompaniesListView { get; private set; }
    private vwCompanyListDataTable CompaniesList { get; set; }
    public RelayCommand ViewImageMouseDownCommand { get; private set; }
    public vmCompaniesList()
    {
        ViewImageMouseDownCommand = new RelayCommand(ViewImageMouseDown);
        using (vwCompanyListTableAdapter taCompanies = new vwCompanyListTableAdapter())
        {
            CompaniesList = taCompanies.GetData();
            CompaniesListView = CompaniesList.DefaultView;
        }
    }
    private void ViewImageMouseDown(object parameter)
    {
        MessageBox.Show("Click", "", MessageBoxButton.OK, MessageBoxImage.Exclamation);
    }
}

所以我想知道如何处理这个事件?

编辑:我尝试了根据可能的重复帖子,将我的Image添加到Button并订阅点击事件,但仍然没有成功,我想知道是否与它位于DataGridTemplateColumn中有关。

我尝试了以下代码:


    
        
            
                                
    

以及:


    
        
                                                
                                
    

编辑2:感谢ASh,这是使其工作的代码:


    
        
                                            
                
                    
                        
                    
                
            
                                
    

0
0 Comments

问题的原因是MouseBinding应该减少绑定命令到点击事件所需的标记。然而,问题可能是错误的命令绑定。 ViewImageMouseDownCommand不在DataGridRow的DataContext中(DataView的单个元素,DataRowView)。尝试绑定到DataGrid的DataContext:

Command="{Binding Path=DataContext.ViewImageMouseDownCommand, 
                  RelativeSource={RelativeSource AncestorType=DataGrid}}"

解决方法是将命令绑定到DataGrid的DataContext,而不是DataGridRow的DataContext。可以通过使用RelativeSource指定绑定的相对路径来实现。具体来说,使用RelativeSource AncestorType=DataGrid指定相对于DataGrid的绑定源。然后,通过指定Path=DataContext.ViewImageMouseDownCommand将命令绑定到DataGrid的DataContext中的ViewImageMouseDownCommand属性。

通过这样的修改,解决了命令绑定可能出现的错误问题。

0