在新窗口c#WPF MVP模式中刷新数据网格

在新窗口c#WPF MVP模式中刷新数据网格,c#,visual-studio-2010,wpfdatagrid,mvp,C#,Visual Studio 2010,Wpfdatagrid,Mvp,大家好,我使用带WPF的Visual Studio 2010和带模型视图演示者模式的C# 不过我有一些问题。我有一个搜索功能,它根据用户插入的一些标准过滤我的可观察集合: public void Search(string criteria) { if (!string.IsNullOrEmpty(criteria) && criteria.Length > 2) { var rez = from ua in

大家好,我使用带WPF的Visual Studio 2010和带模型视图演示者模式的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();
            }


        }
    }
现在一切都好了。但是,这是一张账单。这就是我的大部分应用程序的结构。不幸的是,由于我的应用程序中的大量数据和标签工作速度比新窗口慢得多,我最大的列表显示在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();
            }


        }
    }
另一件有趣的事情是,如果我在添加新项目之前搜索一个项目,然后通过删除搜索文本框中的所有内容,然后单击搜索,显示所有操作,则程序会崩溃,并出现以下错误: 未处理无效的强制转换异常 无法将“System.Windows.Controls.TabItem”类型的对象强制转换为“Inventar.Views.OpremaListView”类型

我猜这与程序中没有打开选项卡有关,因此失败了,但我不知道如何修复它,任何帮助都将不胜感激。
不管怎样,我只是不知道该怎么办,我正在寻找任何我能得到的帮助。谢谢

我一直在玩弄它,这就是我发现的。如果我把这行放进去:UbrzajAdress=newobservableCollection(_addressrepository.FindByLookup(criteria));它将显示刚才添加的行。但是当我删除一行时,当我搜索它时,它将再次显示。如果我省略它,我就不会有删除的问题,但是我会有没有显示新行的问题。
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;


    }