好的,这是我的情况:
- 我有一个使用 Bindings 填充的 ListBox (一个带有项目列表的类)
- ListBox 中的每个项目都包含一些 TextBlocks、一个 ProgressBar 和一个 Button
- 单击按钮后,会触发正确的事件,我可以检索被单击的“对象”
((Button)sender).DataContext
问题:
- 单击按钮后,我应该如何访问被单击项目的 UI 控件,例如将进度值“绑定”到“选定”项目的进度条?
好的,这是我的情况:
((Button)sender).DataContext
问题:
如果您可以访问按钮(通过强制转换sender
),那么您可以通过浏览可视化树来访问其他控件(使用 button.Parent 检索按钮的父项,然后使用子项,等等......)。但这样做是个坏主意,因为它会在您的 UI 和您的代码之间创建一个强依赖关系(当您更改 UI 时,您必须更改代码)。
相反,使用数据绑定来设置控件属性,并从后面的代码中修改您的模型。基本上,您已经知道如何使用 检索模型((Button)sender).DataContext
,为什么不将进度条绑定到该对象的属性?
如果您无法修改模型或不想在其上添加“Progress”属性,则可以使用包装器:
public class Wrapper : INotifyPropertyChanged
{
public MyModel Model { get; set; }
public double Progress { get; set; }
// etc...
}
然后只需将这些对象绑定到您的列表框。