通过发件人访问GUI项目

本文关键字:访问 GUI 项目 | 更新日期: 2023-09-27 18:21:54

好吧,这是我的情况:

  • 我有一个使用Bindings(一个具有项列表的类)填充的ListBox
  • ListBox中的每个项目都包含一些TextBlock、一个ProgressBar和一个Button
  • 单击按钮后,将触发适当的事件,我可以通过((Button)sender).DataContext检索正在单击的"对象"

问题:

  • 单击按钮后,我应该如何访问被单击项目的UI控件,例如将进度值"绑定"到"选定"项目的进度条

通过发件人访问GUI项目

如果您有权访问按钮(通过强制转换sender),那么您可以通过浏览可视化树来访问其他控件(通过使用button.parent,然后是children,依此类推…来检索按钮的父控件)。但这样做是个坏主意,因为它会在UI和代码之间产生强烈的依赖关系(当您更改UI时,必须更改代码)。

相反,使用数据绑定来设置控件属性,只需从代码后面修改模型。基本上,您已经知道如何使用((Button)sender).DataContext检索模型,为什么不将进度条绑定到该对象的属性呢?

如果你不能修改模型或者不想在上面添加"Progress"属性,你可以使用包装器:

public class Wrapper : INotifyPropertyChanged
{
    public MyModel Model { get; set; }
    public double Progress { get; set; }
    // etc...
}

然后将这些对象绑定到您的列表框中。