我有一个相当复杂的数据树,我在WPF UserControl中显示,控件使用DataTemplates创建并链接各种UI元素,直到树中的各种数据。这是一个(非常)简单化的例子,它包含一个项目列表,这些项目显示在一个位于画布上的ItemsControl中,每个元素都用一个TextBox表示:
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBox
Text="{Binding ...}"
Canvas.Left="{Binding ...}"
Canvas.Top="{Binding ...}"
/>
</DataTemplate>
</ItemsControl.ItemTemplate>
现在我的UserControl中发生了一个事件,我有一个列表项的引用,我想将焦点设置为它后面的TextBox项。有没有一种简单的方法从数据上下文绑定的数据对象中获取TextBox元素?或者我是否必须自己手动遍历整个可视树?
我意识到我可以在数据元素本身内部放置一个成员并使用触发器来执行我正在尝试做的任何事情,但在我的情况下,它需要一个额外的抽象层,我真的很想避免尽可能。
答案 0 :(得分:1)
如你所说,如果你不能直接将一个成员添加到你正在使用的项类中,我假设它是一个你无法访问的内置类型,你必须创建一个合适的View Model来访问一个触发器像
<Trigger Property="IsFocused" Value="True">
<Setter TargetName="myTextBox" Property="FocusManager.FocusedElement" Value="{Binding IsTextBoxFocused}" />
</Trigger>
这是另一层抽象,但您总会发现使用您有权访问的视图模型很重要。