Вызов метода UserControl из другого UserControl - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь вызвать метод из UserControl из другого UserControl. Я не могу отследить UserControl, из которого я пытаюсь вызвать метод, чтобы вызвать метод.

Я пытаюсь вызвать следующий метод, который находится в AddDeal.xaml.cs

        public void loadDealProducts()
        {
            InfoBox.Information("loadDealProducts called.", "testing");
        }

Я отслеживаю AddDeal UserControl и пытаюсь вызвать метод loadDealProducts () в файле AddDealProducts.xaml.cs, используя следующий метод

            Window window = null;
            if (sender is Window)
                window = (Window)sender;
            if (window == null)
                window = Window.GetWindow(sender);
            return window;

          (window as AddDeal).loadDealProducts();

Но окно возвращает ноль, поэтому я не могу вызвать метод loadDealProducts.

Вместо получения окна с помощью GetWindow, есть ли способ получить UserControl? Я пробовал Window.GetUserControl и UserControl.GetUserControl, но такого метода не существует.

Отправитель - это объект DependencyObject из AddDeal.xaml.cs, который я получаю, когда нажимаю кнопку в AddDeal.xaml следующим образом:

<Button Click="BtnAddProducts" CommandParameter="{Binding Path=ProductID}">Add Product</Button>

, который вызывает следующее:


        private void BtnAddProducts(object sender, RoutedEventArgs e)
        {
            var button = (Button)sender as DependencyObject;
            Window AddProductsDialog = new Window {
                Title = "Add Products to Deal",
                Content = new AddDealProduct(button, productID, false, 0)
            };
            AddProductsDialog.ShowDialog();
        }


Как видите, я отправляю button, который является объектом DependencyObject на AddDeal.xaml.cs / xaml

Когда он открывает новое окно AddDealProduct, у него есть AddDealProduct.xaml (файл пользовательского интерфейса) и его файл с выделенным кодом .xaml.cs. В этом файле я хочу вызвать функцию из вызывающего UserControl (AddDeal).

1 Ответ

0 голосов
/ 16 апреля 2019

Хорошо, я решил это.

Я посылаю DependencyObject sender, которое я получаю из события Button Click из исходного окна UserControl, в другой класс UserControl, в качестве параметра.

Затемя использую объект отправителя для разрешения UserControl и вызова функции в своем классе из другого класса UserControl.

Чтобы вызвать функцию, я делаю следующее:

AddDealUserControl ownerx2 = FindVisualParent<AddDealUserControl>(sender);
ownerx2.loadDealProducts();

вспомогательный класс FindVisualParent:

        public static T FindVisualParent<T>(DependencyObject child)
     where T : DependencyObject
        {
            // get parent item
            DependencyObject parentObject = VisualTreeHelper.GetParent(child);

            // we’ve reached the end of the tree
            if (parentObject == null) return null;

            // check if the parent matches the type we’re looking for
            T parent = parentObject as T;
            if (parent != null)
            {
                return parent;
            }
            else
            {
                // use recursion to proceed with next level
                return FindVisualParent<T>(parentObject);
            }
        }

Надеюсь, это поможет.

...