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

WSk*_*kid 2 c# wpf

我正在尝试在WPF程序中实现自定义搜索对话框.Parent窗口是绑定到Observable Collection的ListView.

我用搜索表单创建了一个新窗口,它被初始化为:

searchForm sf = new searchForm(_QPCollection);
sf.Owner = this;
sf.Show();
Run Code Online (Sandbox Code Playgroud)

我有这个函数我试图调用(在所有者窗口中):

public void selectIndex(int index)
{
    ListViewItem toSelect = listView1.Items[index] as ListViewItem;
    toSelect.Focus();
}
Run Code Online (Sandbox Code Playgroud)

然后在子窗口(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);
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

我收到错误:System.Windows.Window不包含"selectIndex"的定义.

_QPCollection是搜索将循环的可观察集合.我有搜索逻辑工作,但我似乎不能Focus()在父窗口中ListView的索引.

我的第一个想法是有一个公共函数,我可以传递索引,它会做焦点,但我似乎无法找到从父窗口中的子窗口调用函数的方法.

我接近这个完全错了吗?这个答案似乎适用于WinForms,但我确信有一种方法可以访问WPF中的父窗口及其公共功能/属性.

Jac*_*cob 7

处理该场景的更简洁方法是让您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;
Run Code Online (Sandbox Code Playgroud)