从子窗口调用父窗口中的函数
问题描述:
我试图在WPF程序中实现自定义搜索对话框。父窗口是绑定到Observable集合的ListView。从子窗口调用父窗口中的函数
我做了与搜索形成一个新的窗口,它是像这样初始化:
searchForm sf = new searchForm(_QPCollection);
sf.Owner = this;
sf.Show();
,我有这个功能,我想打电话(在所有者窗口):
public void selectIndex(int index)
{
ListViewItem toSelect = listView1.Items[index] as ListViewItem;
toSelect.Focus();
}
然后在子窗口(searchForm)试图调用selectIndex像这样:
public void SearchJob_Click(object sender, RoutedEventArgs e)
{
if (sJob.Text == "" || sJob.Text == null) { return; }
for (int i = findCount; i < _QPCollectionSearch.Count; i++)
{
if (i == _QPCollectionSearch.Count - 1) { i = 0; }
if (_QPCollectionSearch[i].jobNumAndFlow.IndexOf(sJob.Text) > -1)
{
findCount = i;
Owner.selectIndex(i);
}
}
}
我得到的ER ror:System.Windows.Window不包含“selectIndex”的定义。
_QPCollection
是搜索将循环浏览的集合。我有搜索逻辑工作,但我似乎无法在父窗口中ListView的索引Focus()
。
我的第一个想法是有一个公共职能,我可以通过索引,它会做的重点,但我似乎无法找到一种方法来调用父窗口中的子窗口的功能。
我接近这完全错了吗?这个answer似乎是用于WinForms,但我确定有一种方法可以访问WPF中的父窗口及其公共函数/属性。
答
处理这种情况的一种更简洁的方式就是让您的searchForm
举办活动。父窗口可以监听该事件,并设置注重自己的列表视图:
public class searchForm
{
public event EventHandler<SearchEventArgs> SearchResultSelected = delegate { };
}
public class SearchEventArgs : EventArgs
{
public int Index { get; set; }
}
searchForm sf = new searchForm(_QPCollection);
sf.SearchResultSelected += (s, e) => MyListView.SelectedIndex = e.Index;
答
如果设置了Owner
像你这样,你应该能够通过(Owner as MyWindowDerivative).Method()
调用对话中的公共方法(如果业主是Window
型),究竟是从这样做,阻止你?
编辑:如果你打算去那条路线,你应该确保Owner
总是类型MyWindowDerivative
,例如,通过覆盖Owner-Property,也可以防止无参数的构造函数。
我更增添了几分代码和错误信息,这引起了 - 它不具有法的定义() 。 – WSkid 2011-01-12 21:30:03
您是否投出或解除了所有者窗口的权利?我忘了添加最初.... – 2011-01-12 21:33:21