我正在尝试在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中的父窗口及其公共功能/属性.
处理该场景的更简洁方法是让您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)
| 归档时间: |
|
| 查看次数: |
10960 次 |
| 最近记录: |