在.close()上返回一个对象的WPF表单
本文关键字:一个对象 WPF 表单 返回 close | 更新日期: 2023-09-27 18:12:30
所以我正在为此工作,我有一个数据库,当有人按下"搜索"按钮时,它会打开一个提示,他/她输入他正在寻找的名称或ID。然后,Lambda表达式在数据库中找到正确的对象,并将其放入一个函数中供Main函数使用。
但是有我的问题,主函数不等待属性为"非空",而是取空值,所以什么也没发生。
我已经查了每一个谷歌结果(在第一页)每一个可能的公式我能想到。对话sult不返回对象。
谢谢。
下面是我的代码,如果你想看的话:
//In the main function (well main WPF window)
Recherche recherche = new Recherche("film", (this.rbIdentifiant.IsChecked == true ? true : false));
if (recherche.ShowDialog() == true)
{
ClientsListView.ScrollIntoView(recherche.Obj);
}
//In the prompt
private string _sType;
private bool _bType;
public object Obj { get; private set; }
public Recherche(string sType, bool bType)
{
InitializeComponent();
_sType = sType;
_bType = bType;
if (bType)
this._lblTypeRecherche.Content = "ID";
else
this._lblTypeRecherche.Content = "Nom/Titre:";
}
private void _btnRecherche_Click(object sender, RoutedEventArgs e)
{
using (var db = new DBaseContainer())
{
if (_sType == "film" && _bType)
{
int iId = this._txtRecherche.Text.ToInt();
var film = db.Films.Where(x => x.FilmId == iId);
Obj = film.First();
}
if (_sType == "film" && !_bType)
{
var film = db.Films.Where(x => x.Titre == this._txtRecherche.Text);
Obj = film.First();
}
if (_sType == "client" && _bType)
{
int iId = this._txtRecherche.Text.ToInt();
var client = db.Clients.Where(x => x.ClientId == iId);
Obj = client.First();
}
if (_sType == "client" && !_bType)
{
var client = db.Clients.Where(x => x.Nom == this._txtRecherche.Text);
Obj = client.First();
}
}
this.Close();
}
有两种处理方法。或者,你在recherche
控件上使用一个事件并在那里做你的事情。(事件的sender
对象应为窗口/控件)。
或者在控件的.Visibility
属性上使用while
循环。
如果Recherche
继承自Window
,这将正常工作:
Recherche recherche = new Recherche("film", (this.rbIdentifiant.IsChecked == true ? true : false));
recherche.Closed += (o, e) => {ClientsListView.ScrollIntoView((o as Recherche).Obj);};