通过发件人访问GUI项目
本文关键字:访问 GUI 项目 | 更新日期: 2023-09-27 18:21:54
好吧,这是我的情况:
- 我有一个使用Bindings(一个具有项列表的类)填充的ListBox
- ListBox中的每个项目都包含一些TextBlock、一个ProgressBar和一个Button
- 单击按钮后,将触发适当的事件,我可以通过
((Button)sender).DataContext
检索正在单击的"对象"
问题:
- 单击按钮后,我应该如何访问被单击项目的UI控件,例如将进度值"绑定"到"选定"项目的进度条
如果您有权访问按钮(通过强制转换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...
}
然后将这些对象绑定到您的列表框中。