【问题标题】:WPF DataBinding - Fire event from a repeated control buttonWPF DataBinding - 从重复的控制按钮触发事件
【发布时间】:2009-02-20 15:39:38
【问题描述】:

根据my question on binding in general,我想就以下场景寻求帮助。

我有一个通过 ListBox 控件中的 DataTemplate 显示的对象集合 (imageFileData)。该控件绑定到 ObservableCollection。集合和模板都在我的应用程序 xaml 和 xaml.cs 文件中定义。向集合中动态添加项目按预期工作,并在我的列表框中显示一个新的模板项目。很好。

我想做的一件事是通过单击 DataTemplate 中定义的按钮从集合中删除特定项目。为按钮定义 Click 处理程序允许我处理事件,但我不知道从哪里获取与模板化按钮相关的 imageFileData 对象。我的按钮事件处理程序显然将按钮作为发送者和一组 RoutedEventArgs 传递,但我不知道如何将这些数据关联回集合中的一个项目以允许我将其删除。

任何人都可以帮我解决这个问题,还是因为我不知道从哪里开始,所以我注定要在 Google 搜索中进行尴尬且毫无结果的搜索? ;)

谢谢 ZS

【问题讨论】:

    标签: wpf data-binding event-handling


    【解决方案1】:

    用于生成项目的数据将位于 ButtonDataContext 中(它从容器继承 - 在您的情况下为 ListBoxItem):

    private void ButtonClicked(object sender, EventArgs e)
    {
        var button = sender as Button;
        var imageFileData = button.DataContext as ImageFileData;
    
        ...
    }
    

    【讨论】:

    • 肯特,你是一个明星 - 让我从一个周末想知道该怎么做才能找到答案。谢谢。
    【解决方案2】:

    另一种方法是将可视化树向上移动到ListBoxItem(包含您在datatemplate 中定义的所有元素)。 当您拥有包含单击按钮的ListBoxItem 时,您可以轻松获取和删除ListBoxItem 的数据。

    GetObjectDataFromPoint 中找到hereFindAncestor 中找到here 中的一个向上遍历视觉树的示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-07
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      相关资源
      最近更新 更多