2012-02-15 49 views
0

我有一个具有ItemsControl的UserControl。这个ItemsControl绑定到一个对象列表。要显示这些对象,我有* DataTemplate * s确定如何呈现对象。迭代动态生成的控件并获得某些属性

我希望能够检索控件的当前值,如文本(如果它是一个文本框)或SelectedItem(如果它是一个组合框)。

如何迭代这些动态生成的控件?我不知道控件的名称,因为它们是在运行时生成的。

谢谢..

回答

1

为什么我能想到的除了搜索可视化树的控制和他们的模板属性最简单的可能是ItemsControl的数据源到一个ObservableCollection绑定。这就是为什么你可以动态添加任何类型的控件到列表中。

一旦你这样做,你可以很容易地检查列表中每个UIElement的类型。例如;如果它是一个文本框,然后通过强制转换等方式获取文本属性。

+0

是的,实际上我已经将ItemsControl源绑定到List ..我认为这仍然是一个ObservableCollection的权利?如何检查ItemsControl列表中的UIElement? ItemsControl.Items只给我的列表来源..它不给我的控件在ItemsControl .. – krebstar 2012-02-15 08:53:28

+1

首先,我建议ObservableCollection的原因是,ObservableCollection实现INotifyPropertyChanged接口,所以当列表中的项目更改(删除/添加),它会更新您绑定列表的任何元素。通常情况下,您可以将ItemsControl.datasource或ItemsControl.items(我不知道在我的头顶)将其转换为任何元素类型。但是,我建议您使用您设置绑定的实际列表元素。这样,它就会遵循MVVM设计模式,并在构建更复杂的应用程序时让您的生活更轻松。 – 2012-02-15 09:00:23

+0

嗯..这是有道理..但我不知道如何适应它到我到目前为止。我有一个基本上只是告诉我的控件如何呈现用户界面的对象列表。例如,我有一个具有displayname成员的对象以及要显示的字符串(选项)列表。用户控件将其显示为组合框。该对象没有用于设置所选项目的字段。如果是这样,我仍然不知道如何将选定的项绑定到它:S Hoo男孩这是如此令人困惑:S – krebstar 2012-02-15 09:16:24

相关问题