我想要做的只是有一個組合框從sqlite表中填充數據。雖然我已經用代碼方法完成了這些工作,但我真的很想在我能看到的更好的WPF方法中做到這一點。如何使用DataContext?
從我瞭解的流動應該是這樣的:
我應該保存的數據的類,我做了一個快速類的默認構造函數是連接到數據庫,並轉儲它的結果像這樣的列表:
internal class mainmenusql
{
private List<string> _Jobs;
public mainmenusql()
{
SQLiteConnection conn = new SQLiteConnection();
conn.ConnectionString = "Data Source=C:\\Users\\user\\Documents\\db.sqlite;Version=3";
try
{
conn.Open();
SQLiteDataReader reader;
SQLiteCommand command = new SQLiteCommand(conn);
command.CommandType = CommandType.Text;
command.CommandText = "SELECT * FROM Tasks";
reader = command.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
_Jobs.Add(reader.GetValue(0).ToString());
}
}
else
{
MessageBox.Show("No records");
}
}
catch (Exception err)
{
MessageBox.Show(err.Message);
}
finally
{
conn.Close();
}
}
}
與列表「對象引用未設置爲對象的實例」有一些錯誤。
但是無論如何,下一步應該是將該表單的DataContext
設置爲該對象的權利?
public MainWindow()
{
DataContext = new mainmenusql();
InitializeComponent();
}
最後,組合框應該有約束力嗎?
<Window x:Class="sqliteDatacontext.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<ComboBox DataContext="{Binding Path=_Jobs}" HorizontalAlignment="Left" Margin="141,124,0,0" VerticalAlignment="Top" Width="120"/>
</Grid>
</Window>
我在做什麼錯在這裏?
您的對象丟失是因爲您從未初始化「作業」列表通過_Jobs = new List();那麼你可以添加到它。 –
DRapp
要添加@DRapp所說的內容,您還應該將其設置爲公開,因爲它可以作爲DataContext的一部分訪問。 –
沒問題,這解決了列表中的問題,但是我仍然沒有在組合框中找到任何東西,我應該使用除{Binding Path = _Jobs}以外的其他類型的datacontext嗎? – Herrozerro