C# 处理绑定列表框内的事件

C# 处理绑定列表框内的事件,c#,wpf,xaml,C#,Wpf,Xaml,我正在努力解决这个问题,我正在尝试处理绑定列表框中的PreviewMouseLeftButtonDown&MouseEnter&MouseLeave事件。目前正在学习WPF 该图像与其他控件一起位于我的列表框中。这里有一张图片供澄清 我的问题是这两个图像控件在代码隐藏中是未知的,因为它们位于数据模板中,这就是我无法处理它们的原因 这是我的Xaml代码: <ListBox Name="ListBoxDownload" Height="414" Width="729" Canvas.Left

我正在努力解决这个问题,我正在尝试处理绑定列表框中的PreviewMouseLeftButtonDown&MouseEnter&MouseLeave事件。目前正在学习WPF

该图像与其他控件一起位于我的列表框中。这里有一张图片供澄清

我的问题是这两个图像控件在代码隐藏中是未知的,因为它们位于数据模板中,这就是我无法处理它们的原因

这是我的Xaml代码:

<ListBox Name="ListBoxDownload" Height="414" Width="729" Canvas.Left="-3" Visibility="Collapsed">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Canvas Height="89" >
                <Canvas Height="86" Width="11" Background="#FFC33232" Canvas.Left="-2"/>
                <ProgressBar Width="694" Canvas.Left="20" Canvas.Top="76" Height="10" Value="{Binding Value, UpdateSourceTrigger=PropertyChanged}" Maximum="{Binding Maximum}" Minimum="0"/>
                <Label Foreground="White" FontFamily="/SpotWatch;component/Resources/Fonts/#Montserrat Light" FontSize="18" Content="{Binding Name}" Canvas.Left="14" Canvas.Top="-4"/>
                <Label Foreground="#FFC3BDBD" FontFamily="/SpotWatch;component/Resources/Fonts/#Montserrat Ultra Light" FontSize="14" Content="{Binding Artist}" Canvas.Left="14" Canvas.Top="25"/>
                <Label Foreground="#FF8D8D8D" FontFamily="/SpotWatch;component/Resources/Fonts/#Montserrat Ultra Light" FontSize="12" Content="{Binding Status}" Canvas.Left="14" Canvas.Top="50"/>
                <Image Name="ImageDeleteSong" Source="/Resources/Images/SpotWatch.Delete.png" Canvas.Left="675" Canvas.Top="6" Width="17" Height="19" MouseEnter="ImageDeleteSong_MouseEnter" MouseLeave="ImageDeleteSong_MouseLeave" PreviewMouseLeftButtonDown="ImageDeleteSong_PreviewMouseLeftButtonDown"/>
                <Image Name="ImageRemoveSong" Source="/Resources/Images/SpotWatch.Remove.png" Canvas.Left="697" Canvas.Top="6" Width="17" Height="19" MouseEnter="ImageRemoveSong_MouseEnter" MouseLeave="ImageRemoveSong_MouseLeave" PreviewMouseLeftButtonDown="ImageRemoveSong_PreviewMouseLeftButtonDown"/>
            </Canvas>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

图像不需要在代码隐藏中被知道,如果您连接事件,您可以将图像控件作为第一个参数传递。你只需要投下它

或者,将图像包装在按钮中,绑定
命令
,并根据需要通过
命令参数
绑定传递某些内容。(通常我会避免在视图模型上使用事件和绑定命令。)


你为什么还要访问这些图像?那不是你应该做的事。如果需要修改它们,则应绑定相应的属性,然后修改绑定的数据


鉴于你在评论中所说的,我将这样做:

public SomeViewModel()
{
    _deleteUser = new DelegateCommand(user =>
        Users.Remove((Person)user)
    );
}

private readonly ObservableCollection<Person> _Users;
public ObservableCollection<Person> Users { get { return _Users; } }

private readonly DelegateCommand _deleteUser;
public DelegateCommand DeleteUser { get { return _deleteUser; } }
public SomeViewModel()
{
_deleteUser=新的DelegateCommand(用户=>
用户。删除((个人)用户)
);
}
私有只读可观察收集用户;
公共observeCollection用户{get{return\u Users;}}
私有只读DelegateCommand _deleteUser;
公共DelegateCommand DeleteUser{get{return{u DeleteUser;}}

去除
要点:

  • 在列表级别删除命令
  • 按钮通过
    相对资源绑定到它
  • 将当前项(
    {Binding}
    )作为参数传递
  • 命令强制转换参数并将其从列表中删除

  • DelegateCommand
    ICommand
    的一个简单的基于委托的实现,您可以在web上找到实现示例。)

    如果连接事件,则图像不需要在代码隐藏中已知,图像控件将作为第一个参数传递。你只需要投下它

    或者,将图像包装在按钮中,绑定
    命令
    ,并根据需要通过
    命令参数
    绑定传递某些内容。(通常我会避免在视图模型上使用事件和绑定命令。)


    你为什么还要访问这些图像?那不是你应该做的事。如果需要修改它们,则应绑定相应的属性,然后修改绑定的数据


    鉴于你在评论中所说的,我将这样做:

    public SomeViewModel()
    {
        _deleteUser = new DelegateCommand(user =>
            Users.Remove((Person)user)
        );
    }
    
    private readonly ObservableCollection<Person> _Users;
    public ObservableCollection<Person> Users { get { return _Users; } }
    
    private readonly DelegateCommand _deleteUser;
    public DelegateCommand DeleteUser { get { return _deleteUser; } }
    
    public SomeViewModel()
    {
    _deleteUser=新的DelegateCommand(用户=>
    用户。删除((个人)用户)
    );
    }
    私有只读可观察收集用户;
    公共observeCollection用户{get{return\u Users;}}
    私有只读DelegateCommand _deleteUser;
    公共DelegateCommand DeleteUser{get{return{u DeleteUser;}}
    
    
    去除
    
    要点:

  • 在列表级别删除命令
  • 按钮通过
    相对资源绑定到它
  • 将当前项(
    {Binding}
    )作为参数传递
  • 命令强制转换参数并将其从列表中删除

  • DelegateCommand
    是一个简单的基于委托的
    ICommand
    实现,您可以在web上找到实现示例。)

    您根本没有描述问题什么问题?请告诉我们。如果我没有很好地描述它,请参阅编辑。您根本没有描述问题。什么问题?告诉我们。对不起,如果我没有很好地描述它,请参阅编辑。我无法澄清我的问题。在我的列表框中,有不止一个项目,因此我试图通过单击图像图标来删除/删除它们Control@iNCEPTiON_:如前所述,我会使用带有
    命令的按钮来进行此操作。此外,这不是项的操作,而是视图模型的一个级别。@iNCEPTiON\ux:这也是您首先应该问的问题:我正试图通过单击Icon@iNCEPTiON_:添加示例。我无法澄清我的问题。我的列表框中不止一项,因此我尝试通过单击图像所在的图标来移除/删除它们Control@iNCEPTiON_:如前所述,我会使用带有
    命令的按钮来进行此操作。此外,这不是项的操作,而是视图模型的一个级别。@iNCEPTiON\ux:这也是您首先应该问的问题:我正试图通过单击Icon@iNCEPTiON_:添加示例。