gpt4 book ai didi

wpf - 在 ListView 数据模板 WPF 中绑定(bind) UserControl

转载 作者:行者123 更新时间:2023-12-04 02:24:58 25 4
gpt4 key购买 nike

所以我有这个问题:

  • 我创建了一个 UserControl(基本上是一个文本框和标签)。我可以使用依赖属性绑定(bind)此用户控件。
  • 我有一个 ListView,我可以在其中将文本框放入数据模板并将“文本”属性绑定(bind)到绑定(bind)值。

到目前为止一切顺利。但是现在,如果我尝试将 UserControl 置于完全相同的场景中,DependencyProperty 将停止工作。

代码如下:[ListView]

<ListView x:Name="DtContactDetailListView" ItemsSource="{Binding}">
<ListBox.ItemTemplate>
<DataTemplate>
<UserControl:tbx label="{Binding detail}" text="{Binding value}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListView>

在这种情况下,绑定(bind)在 ListView 之外、在表单的其他部分中有效……所以这不是我的 DepedencyProperty 的问题。还可以将 UserControl 替换为文本框,并添加完全相同的 Binding 也可以。但它在这个下不起作用...为什么?!

更新根据要求,我更新了 UserControl 的代码。请记住,这在将它绑定(bind)到窗口或页面上的其他元素时非常有效。只是在 ListView 中不起作用。

Public Sub New()
InitializeComponent()
Me.DataContext = Me
End Sub

'TextBox property
Public Shared ReadOnly tbxTextProperty As DependencyProperty = DependencyProperty.Register("text", GetType([String]), GetType(tbx), New FrameworkPropertyMetadata(String.Empty))
Public Property text() As [String]
Get
Return GetValue(tbxTextProperty).ToString()
End Get
Set(value As [String])
SetValue(tbxTextProperty, value)
End Set
End Property

最佳答案

就像我在评论中提到的问题是在你的 UserControl 中,你已经明确地将 userControl 的 DataContext 设置为它自己:

Me.DataContext = Me

因此,绑定(bind) label="{Binding detail}" 在 UserControl(本身)的 dataContext 中而不是在 ListBoxItem 的底层 dataContext 中寻找属性 detail.

如果您想在 ListBoxItem 的 DataContext 中查找项目,则必须进行显式绑定(bind),例如:

label="{Binding DataContext.detail,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType=ListBoxItem}}"

您应该在 UserControl 中删除对自身的 DataContext 设置。

您必须将其设置为与声明的 DP 绑定(bind)。我建议使用 ElementName 绑定(bind)它并删除设置 DataContext。 这样您就不必提供显式绑定(bind),您的 UserControl 将自动从其 Visual 父级继承 DataContext。

<UserControl x:Name="myUserControl">
<Label Content="{Binding label, ElementName=myUserControl}"/>
<TextBlock Text="{Binding text, ElementName=myUserControl}"/>
</UserControl>

关于wpf - 在 ListView 数据模板 WPF 中绑定(bind) UserControl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22595388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com