如何使用DataContext



我要做的就是简单地用sqlite表中的数据填充一个组合框。虽然我已经用代码方法做到了这一点,但我真的很想用我能看到的更好的WPF方式来做这件事。

根据我的理解,流程应该是这样的:

我应该有一个类来保存数据,我做了一个快速的类,默认构造函数是连接到数据库,并转储它的结果到一个列表,像这样:

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>

我在这里做错了什么?

要绑定到某个数据上下文,它需要通过公共getter/setter公开…

public class mainmenusql
{
    public List<string> _Jobs
    { get ; protected set; }   

    public mainmenusql()
    {
       _Jobs = new List<string>();
       // rest of populating your data
    }
}

窗口控件中的绑定是ItemsSource

<ComboBox ItemsSource="{Binding Path=_Jobs}" />

"DataContext"应用于整个窗口…以此为基础,任何控件都可以将其元素"绑定"到数据上下文中几乎任何"公开"可用的内容。在这种情况下,ComboBox的选择列表来自它的"ItemSource"属性…因此,您希望ITEMSOURCE指向_Jobs.

相关内容

最新更新