掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
WPF開發(fā)是近年來非常流行的一種桌面應(yīng)用程序開發(fā)技術(shù),它可以幫助開發(fā)人員快速、高效地創(chuàng)建充滿交互性和美觀的應(yīng)用程序。在WPF開發(fā)中,窗口的嵌套是非常常見的操作,而子窗口與父窗口之間的信息傳遞則更是必不可少的。本文將介紹一個(gè)常見的WPF開發(fā)場景——如何在子窗口中操作數(shù)據(jù)庫,然后將數(shù)據(jù)傳遞給父窗口。

一、創(chuàng)建子窗體和父窗體
在WPF開發(fā)中,我們首先需要進(jìn)行的操作就是創(chuàng)建一對(duì)子窗體和父窗體。首先創(chuàng)建一個(gè)子窗體,例如我們創(chuàng)建一個(gè)名為ChildWindow的子窗體。在Visual Studio中新建一個(gè)WPF Application項(xiàng)目,在項(xiàng)目中創(chuàng)建一個(gè)名為ChildWindow.xaml的文件,然后在文件中添加如下樣式:
“`
xmlns=”http://schemas.microsoft.com/winfx/2023/xaml/presentation”
xmlns:x=”http://schemas.microsoft.com/winfx/2023/xaml”
Title=”ChildWindow” Height=”300″ Width=”300″>
“`
在這里,我們創(chuàng)建了一個(gè)TextBox和一個(gè)Button,用戶可以在TextBox中輸入數(shù)據(jù),然后通過單擊Button將數(shù)據(jù)保存到數(shù)據(jù)庫中。
接下來,我們?cè)賱?chuàng)建一個(gè)父窗體,例如我們創(chuàng)建一個(gè)名為ParentWindow的父窗體。在Visual Studio中新建一個(gè)WPF Application項(xiàng)目,在項(xiàng)目中創(chuàng)建一個(gè)名為ParentWindow.xaml的文件,然后在文件中添加如下樣式:
“`
xmlns=”http://schemas.microsoft.com/winfx/2023/xaml/presentation”
xmlns:x=”http://schemas.microsoft.com/winfx/2023/xaml”
Title=”ParentWindow” Height=”300″ Width=”300″>
“`
在這里,我們創(chuàng)建了一個(gè)Button和一個(gè)ListView,用戶可以通過單擊Button打開一個(gè)ChildWindow子窗體,在ListView中顯示保存到數(shù)據(jù)庫中的數(shù)據(jù)。
二、創(chuàng)建數(shù)據(jù)庫
接下來,我們需要?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)庫并將其與我們的項(xiàng)目關(guān)聯(lián)起來。在Visual Studio中右鍵單擊項(xiàng)目名稱,選擇“添加”->“新建項(xiàng)”,然后選擇“數(shù)據(jù)庫”并添加一個(gè)名為TestDB.mdf的數(shù)據(jù)庫。
三、將數(shù)據(jù)保存到數(shù)據(jù)庫中
在這個(gè)場景中,我們需要將用戶輸入的數(shù)據(jù)保存到TestDB數(shù)據(jù)庫中。我們需要在ChildWindow.xaml.cs文件中添加以下代碼:
“`
private void Button_Click(object sender, RoutedEventArgs e)
{
using (var conn = new SqlConnection(“Data Source=(LocalDb)\\v11.0;Initial Catalog=TestDB;Integrated Security=True”))
{
conn.Open();
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = “insert into TestTable values(@name)”;
cmd.Parameters.AddWithValue(“@name”, txtName.Text);
cmd.ExecuteNonQuery();
}
}
}
“`
在這里,我們使用SqlConnection連接字符串與TestDB數(shù)據(jù)庫建立連接,并使用SqlCommand對(duì)象將輸入的數(shù)據(jù)存儲(chǔ)到TestTable表中。
四、將數(shù)據(jù)傳遞給父窗口
接下來,我們需要將剛剛保存到數(shù)據(jù)庫中的數(shù)據(jù)傳遞給父窗口。我們需要在ParentWindow.xaml.cs文件中添加以下代碼:
“`
private void Button_Click(object sender, RoutedEventArgs e)
{
var childWindow = new ChildWindow();
childWindow.ShowDialog();
using (var conn = new SqlConnection(“Data Source=(LocalDb)\\v11.0;Initial Catalog=TestDB;Integrated Security=True”))
{
conn.Open();
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = “select * from TestTable”;
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
lvData.Items.Add(new { Name = reader[“name”].ToString() });
}
}
}
}
}
“`
在這里,我們首先使用子窗體的ShowDialog()方法打開ChildWindow窗體。在子窗體被關(guān)閉之后,我們使用SqlCommand對(duì)象查詢TestTable表的數(shù)據(jù),并將數(shù)據(jù)添加到ListView控件中。
五、
通過以上操作,我們成功實(shí)現(xiàn)了在WPF開發(fā)中通過子窗體傳遞數(shù)據(jù)庫給父窗體的操作。在實(shí)際開發(fā)中,這個(gè)場景是非常常見的,也是我們?cè)陂_發(fā)WPF應(yīng)用程序時(shí)需要掌握的基本技能之一。這需要我們熟練掌握WPF開發(fā)中窗口和控件的關(guān)系,并且了解如何在不同的窗體之間進(jìn)行數(shù)據(jù)傳遞和交互。只有在熟練掌握這些基本技能之后,我們才能開發(fā)出高效、穩(wěn)定、充滿交互性和美觀的WPF應(yīng)用程序。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù)!
這么說吧,wpf里的數(shù)據(jù)綁定就是給數(shù)據(jù)源(source)亮喚和顯示數(shù)據(jù)的綁定對(duì)象(target)洞鍵敗建立一個(gè)關(guān)系。綁定模式呢一般有單向綁定和雙向綁定的(默認(rèn)為單向綁定,且當(dāng)數(shù)據(jù)源實(shí)現(xiàn)INotifyPropertyChanged接口時(shí),數(shù)據(jù)源改變可以導(dǎo)致前臺(tái)顯示改變)如果是雙向綁定呢,source和target只要有一方改變,另外一方也會(huì)隨之改變。樓主的例子中兩個(gè)窗口都是target,而父窗口列表里selectedItem和子窗口的文本框綁定的應(yīng)該是viewModel里同一個(gè)對(duì)象。當(dāng)子窗口target發(fā)生更改,它會(huì)通知到viewModel這個(gè)source,然后這個(gè)source呢,就會(huì)通知到主窗口這個(gè)target。啊,對(duì)了,一般情況下呢,觸發(fā)數(shù)據(jù)變化是“失去焦點(diǎn)”,就是你所謂的點(diǎn)擊確定按鈕讓子窗口文本框失去焦點(diǎn)的情況下。但如果在綁定的時(shí)候有設(shè)置UpdateSourceTrigger=PropertyChanged,那就會(huì)實(shí)現(xiàn)實(shí)時(shí)更改數(shù)據(jù)納顫了。
這就是綁定掘談的強(qiáng)大之處?;蛘哒f它睜數(shù)們本來用的就是同一個(gè)數(shù)據(jù)源。要想點(diǎn)確定再觸判早碰發(fā),則要改變子窗口的數(shù)據(jù)綁定對(duì)象。
看你子窗口是賣啟如何傳遞了、
如果是子窗口關(guān)閉時(shí),參數(shù)傳遞到父窗體,可以使用構(gòu)造函數(shù)。
在子窗口寫構(gòu)造函數(shù):
public MyForm(string str)
{
//子窗口初始化 然后把str綁定給你子窗口的控渣橘件
}
Winform或者WPF調(diào)用子窗口一般都是
string str = “”;
var mf = new MyForm(str);
mf.ShowDialog(); //或者show();
當(dāng)子窗口關(guān)閉的時(shí)候 會(huì)返回子窗口改變后的str。
如果是子窗口不關(guān)閉,就要往回傳遞值,可以使用全局變量
public static string str{set;get;}
如果希望自動(dòng)刷新,更好使用委托進(jìn)行回調(diào),會(huì)比較麻煩,可以看一下msdn的例子。
listbox中提供 Items.Add()方法,向里面添加參數(shù)。
C#代碼要在VS中才能編譯運(yùn)行,你連實(shí)際的項(xiàng)目都沒有,也沒有給實(shí)現(xiàn)的技術(shù)。
要是需要能運(yùn)行的程序建議你如配團(tuán)直接上某寶去買。
listBox1.Items.Add(參數(shù));
關(guān)于wpf 子窗口向父窗口傳數(shù)據(jù)庫的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
創(chuàng)新互聯(lián)-老牌IDC、云計(jì)算及IT信息化服務(wù)領(lǐng)域的服務(wù)供應(yīng)商,業(yè)務(wù)涵蓋IDC(互聯(lián)網(wǎng)數(shù)據(jù)中心)服務(wù)、云計(jì)算服務(wù)、IT信息化、AI算力租賃平臺(tái)(智算云),軟件開發(fā),網(wǎng)站建設(shè),咨詢熱線:028-86922220

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流