0

好的,这是我的情况:

  • 我有一个使用 Bindings 填充的 ListBox (一个带有项目列表的类)
  • ListBox 中的每个项目都包含一些 TextBlocks、一个 ProgressBar 和一个 Button
  • 单击按钮后,会触发正确的事件,我可以检索被单击的“对象”((Button)sender).DataContext

问题:

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

1 回答 1

1

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

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

如果您无法修改模型或不想在其上添加“Progress”属性,则可以使用包装器:

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

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

于 2013-07-11T11:25:32.860 回答