从子窗口调用父窗口中的函数

问题描述:

我试图在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,也可以防止无参数的构造函数。

+0

我更增添了几分代码和错误信息,这引起了 - 它不具有法的定义() 。 – WSkid 2011-01-12 21:30:03

+0

您是否投出或解除了所有者窗口的权利?我忘了添加最初.... – 2011-01-12 21:33:21