(WPF) Как я могу найти предка о двух ItemsControl в коде позади? - PullRequest
0 голосов
/ 26 марта 2020

У меня есть ItemsControl (A). ItemSourece - это класс «Account». Он содержит некоторые элементы управления, а другой ItemsControl (B).

ItemsControl (B) включает в себя некоторый CheckBox. Это ItemSourece - ObservableCollection, включенная в класс «Account». Контент CheckBox является обязательным для Контента. IsChecked CheckBox является привязкой к IsChecked.

enter image description here

Теперь, когда я нажимаю CheckBox, я хочу получить ID и пользователя в классе «Аккаунт», но я не не знаю жарко, чтобы получить их. Я уже пытаюсь использовать

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

, но он все еще не может стать родителем. Во время выполнения Althouth может отображаться parentElement.VisualParent, но на самом деле это не работает. enter image description here enter image description here

Пожалуйста, помогите мне! Спасибо!

1 Ответ

1 голос
/ 27 марта 2020

@ RickyChen - я вижу твою проблему. AuthorityCheckBox привязывается к вашим визуальным флажкам. Когда вы нажимаете на флажок, ссылка на AuthorityCheckBox.

отсутствует, и вы можете использовать свойство Tag вашего флажка и поместить туда ссылку AuthorityCheckBox.

Настройте свой класс AuthorityCheckBox так, чтобы он содержал public Account Parent, назначенный в конструкторе. Таким образом, вы можете легко получить родительский элемент AuthorityCheckBox:

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;           
}
...