当前位置: 首页 > 编程语言 > C#

从另一个窗口(类)调用方法问题分享

时间:2023-04-10 11:24:14 C#

从另一个窗口(类)调用方法问题在WPF应用程序主窗口的代码隐藏文件中,我有一个方法,使用LINQtoSQL查询数据库并将结果写入ObservableCollection:publicvoidGetStateByDate(stringshcode){MydbDataContextcontextSts=newMydbDataContext();_ShAvaQuCollection.Clear();varsts=frompincontextSts.SAtieswherep.ShID==shcodeselectp;foreach(varpinsts)_ShAvaQuCollection.Add(newShAvaQu{ShCode=p.ShID,SiID=p.SiID,PrCat=p.PrCat});当我从文件后面的同一代码(同一窗口)调用此方法时,一切正常。如果我从另一个窗口调用此方法,使用主窗口的实例,ObservableCollection仍然是空的:SWindowsw=newSWindow();sw.GetStateByDate(stringpar);是什么原因?在这种情况下,该方法是否会创建另一个ObservableCollection实例?(我可以在调试器中看到sw._ShAvaQuCollection包含值集合sw._ShAvaQuCollection和_ShAvaQuCollection_ShAvaQuCollection吗?如果是这样,它是如何解决的?)编辑(添加)ObservableCollection是这样声明的:);公共ObservableCollectionShAvaQuCollection{得到{返回_ShAvaQuCollection;}}publicclassShAvaQu{publicstringShCode{get;放;}publicstringSiID{get;放;}publicintPrCat{得到;放;}}i该方法是从一个窗口调用的,在该窗口中,另一个集合ShQuCollection通过ListView显示。在SelectionChanged事件处理程序中,我得到了这个数据库查询的参数:privatevoidShSelList_SelectionChanged(objectsender,SelectionChangedEventArgse){字符串str=sw.ShQuCollection[ShSelList.SelectedIndex].ShCode;sw.GetStateByDate(str);关闭();}}1)最重要的是,你不应该从你的窗口/表单中调用数据库逻辑。你应该把它抽象成另一个类。然后你可以让你的方法返回一个可观察的集合。但在你的情况下,我假设你正在尝试使用辅助表单重新加载/加载集合,并且你希望它在主表单上。这样做的问题是您正在创建表单的新实例,因此您的集合正在填充但不是在主表单上而是在副本上。有几种方法可以尝试解决这个问题。1)使方法静态化,并使可观察集合静态化,以便更新单个实例。2)将主窗体的实例句柄传递给从窗体以重新使用现有实例。这会更好,这样您就不会到处创建新实例。在第二个窗体的构造函数中,传入主窗口的实例,然后就可以直接使用了。这应该可以解决您的问题。更新:这是一些代码示例。基本上有很多方法可以传递引用。您可以使用构造函数来完成此操作://ThisistheconstructorforyoursecondwindowprivateWindow_parentHandle;publicSecondWindow(Windowobj){this._parentHandle=obj;然后使用该方法从您的主窗体开始,例如Thisopensthewindow。SecondWindoww=newSecondWindow(this);w.Show();现在你的第二个窗口可以直接处理第一个窗口,所以你可以调用那个变量的方法,它就会更新。另一种方法是在第二个窗口上使用公共Setter方法。publicWindowParentContext{get{returnthis._parentHandle;}设置{this._parentHandle=value;然后你可以像这样创建你的表单实例:SecondWindoww=newSecondWindow();//所以就像普通的w.ParentContext=this;//将实例设置为调用形式w.Show();这是基础知识。这种场景适用于任何需要传递引用的场景。希望有所帮助。以上就是C#学习教程:从另一个窗口(类)调用方法题的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: