我试图从其他UserControl的UserControl调用方法。我无法跟踪试图从中调用方法的UserControl。
我正在尝试调用AddDeal.xaml.cs中的以下方法
public void loadDealProducts()
{
InfoBox.Information("loadDealProducts called.", "testing");
}
我正在跟踪AddDeal UserControl,并尝试使用以下方法在文件AddDealProducts.xaml.cs中调用loadDealProducts()方法
Window window = null;
if (sender is Window)
window = (Window)sender;
if (window == null)
window = Window.GetWindow(sender);
return window;
(window as AddDeal).loadDealProducts();
但是window返回的是null,所以我不能调用方法loadDealProducts。
不是使用GetWindow获取窗口,而是有一种获取UserControl的方法?我尝试了Window.GetUserControl和UserControl.GetUserControl,但是没有这样的方法。
发件人是AddDeal.xaml.cs中的DependencyObject,当我单击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
,它是AddDeal.xaml.cs / xaml上的DependencyObject
当打开新窗口AddDealProduct时,它具有AddDealProduct.xaml(UI文件)及其.xaml.cs代码隐藏文件。在此文件中,我想从调用UserControl(AddDeal)中调用一个函数。
答案 0 :(得分:0)
好,我解决了。
我将从源Windows UserControl的DependencyObject sender
事件中获取的Button Click
作为参数发送给另一个UserControl类。
然后我使用sender对象解析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);
}
}
希望有帮助。