大家好,我将 Visual Studio 2010 与 WPF 和 C# 与模型视图演示者模式一起使用。
不过我有一些问题。我有一个搜索功能,它根据用户插入的一些标准过滤我的可观察集合:
public void Search(string criteria)
{
if (!string.IsNullOrEmpty(criteria) && criteria.Length > 2)
{
var rez = from ua in _listAdress
where ua.Naziv.ToUpper().IndexOf(criteria.ToUpper()) >= 0 || ua.InventurniBroj.ToString() == criteria
select ua;
//var rez = from ua in _listAdress
// where ua.Naziv.ToUpper() == criteria.ToUpper() || ua.InventurniBroj.ToString() == criteria
// select ua;
//ListAdress = new ObservableCollection<Adress>(_adressRepository.FindByLookup(criteria));
UbrzajAdress = new ObservableCollection<Adress>(rez);
StatusText = string.Format("{0} zaduzenih pronađeno.", UbrzajAdress.Count);
}
else
{
//ListAdress = new ObservableCollection<Adress>(_adressRepository.ListOprema());
var rez = from ua in _listAdress
select ua;
UbrzajAdress = new ObservableCollection<Adress>(rez);
StatusText = "Prikaz svih zaduzenih.";
}
for (int i = 0; i < this.View.tabs.Items.Count; i++)
{
OpremaListView tab = (OpremaListView)this.View.tabs.Items[i];
if (tab != null && tab.Name != null && tab.Name.Equals("Sva Oprema"))
//if (tab.Header.Equals("Sva Oprema"))
{
OpremaListView opremaListView = (OpremaListView)tab.Content;
OpremaListPresenter opremaListPresenter = opremaListView.Presenter;
opremaListPresenter.refresh();
}
}
}
这是刷新方法:
public void refresh()
{
this.View.dg.ItemsSource = _applicationPresenter.UbrzajAdress;
}
现在这一切都有效。但是,这是一个标签。这就是我的大部分应用程序的结构。不幸的是,由于大量数据和选项卡在我的应用程序中的运行速度比新窗口慢得多,因此我最大的列表显示在 WPF 数据网格的新窗口中。
现在,当我尝试更改搜索以升级窗口时,即使它编译我也没有刷新,所以当我输入新行,然后搜索该行时,它不会显示。
这是我尝试更改的搜索,因此它适用于窗口:
public void Search(string criteria)
{
if (!string.IsNullOrEmpty(criteria) && criteria.Length > 2)
{
var rez = from ua in _listAdress
where ua.Naziv.ToUpper().IndexOf(criteria.ToUpper()) >= 0 || ua.InventurniBroj.ToString() == criteria
select ua;
//var rez = from ua in _listAdress
// where ua.Naziv.ToUpper() == criteria.ToUpper() || ua.InventurniBroj.ToString() == criteria
// select ua;
//ListAdress = new ObservableCollection<Adress>(_adressRepository.FindByLookup(criteria));
UbrzajAdress = new ObservableCollection<Adress>(rez);
StatusText = string.Format("{0} zaduzenih pronađeno.", UbrzajAdress.Count);
}
else
{
//ListAdress = new ObservableCollection<Adress>(_adressRepository.ListOprema());
var rez = from ua in _listAdress
select ua;
UbrzajAdress = new ObservableCollection<Adress>(rez);
StatusText = "Prikaz svih zaduzenih.";
}
for (int i = 0; i < this.View.tabs.Items.Count; i++)
{
TestWindow tab = (TestWindow)this.View.tabs.Items[i];
if (tab != null && tab.Title != null && tab.Title.Equals("Sva Oprema"))
//if (tab.Header.Equals("Sva Oprema"))
{
TestWindow opremaListView = (TestWindow)tab.Content;
TestWindowPresenter opremaListPresenter = opremaListView.presenter;
opremaListPresenter.refresh();
}
}
}
这会编译,但不会刷新或执行任何操作。刷新是:
public void refresh()
{
this.View.dg.ItemsSource = _applicationPresenter.UbrzajAdress;
}
另一个有趣的事情是,如果我在添加新项目之前搜索一个项目,然后显示所有 oprema,通过删除搜索文本框中的所有内容然后单击搜索,程序崩溃并出现错误: Invalid Cast Exception is unhandled Unable to cast “System.Windows.Controls.TabItem”类型的对象键入“Inventar.Views.OpremaListView”。
我猜这与程序中没有打开选项卡有关,因此它失败了,但我不知道如何解决它,任何帮助将不胜感激。无论如何,我只是不明白该怎么做,正在寻找我能得到的任何帮助。谢谢