(WPF) 如何在代码后面找到关于两个 ItemsControl 的祖先?

(WPF) How can I find ancestor about two ItemsControl in code behind?

我有一个 ItemsControl(A)。 ItemSource 是一个 Class "Account"。它包含一些控件和另一个 ItemsControl(B)。

ItemsControl(B) 包含一些复选框。它的 ItemSource 是包含在 Class "Account" 中的 ObservableCollection。 CheckBox 的内容绑定到内容。 CheckBox 的 IsChecked 绑定到 IsChecked。

现在当我点击 CheckBox 时,我想在 Class "Account" 中获取 ID 和 User,但我不知道如何获取它们。 我已经尝试使用

    private void CheckBox_Click(object sender, RoutedEventArgs e)
    {
        CheckBox checkBox = sender as CheckBox;
        var parentElement = (ContentPresenter)VisualTreeHelper.GetParent(checkBox);           
    }

但它仍然无法获得父级。 尽管运行时可以显示 parentElement.VisualParent,但实际上它不起作用。

请帮帮我!谢谢!

@RickyChen - 我明白你的问题了。 AuthorityCheckBox 绑定到您的视觉复选框。当您单击复选框时,没有任何 link 回到 AuthorityCheckBox

您可以做的是滥用复选框的 Tag 属性 并将 AuthorityCheckBox 引用放在那里。

调整您的 AuthorityCheckBox class,使其包含在构造函数中分配的 public Account Parent。这样你就可以很容易地得到 AuthorityCheckBox parent:

public class AuthorityCheckBox
{
    public string Content { get; set; }
    public bool IsChecked { get; set; }
    public bool IsEnabled { get; set; }
    public Account Parent { get; private set; }

    public AuthorirtyCheckBox(Account parent)
    {
         this.Parent = parent;
    }
}

事件处理程序如下所示:

private void CheckBox_Click(object sender, RoutedEventArgs e)
{
    AuthorityCheckBox acb = (sender as FrameworkElement).Tag as AuthorityCheckBox;
    Account parent = acb.Parent;           
}