Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如何使用DataContext?_Wpf_Data Binding_Datacontext - Fatal编程技术网

Wpf 如何使用DataContext?

Wpf 如何使用DataContext?,wpf,data-binding,datacontext,Wpf,Data Binding,Datacontext,我试图做的只是让一个组合框填充sqlite表中的数据。虽然我已经用代码方法完成了这项工作,但我真的很想用WPF更好的方式来完成这项工作 根据我的理解,流程应该是这样的: 我应该有一个保存数据的类,我创建了一个快速类,默认构造函数是连接到数据库并将其结果转储到如下列表: internal class mainmenusql { private List<string> _Jobs; public mainmenusql() { SQLiteCo

我试图做的只是让一个组合框填充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();
        }
    }
}
最后,组合框应该具有绑定权限

<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>


我在这里做错了什么?

要绑定到datacontext,需要通过公共getter/setter公开它

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


    public mainmenusql()
    {
       _Jobs = new List<string>();

       // rest of populating your data
    }
}
public类mainmenusql
{
公共工作清单
{get;受保护集;}
公共mainmenusql()
{
_作业=新列表();
//填充数据的其余部分
}
}
窗口控件中的绑定是ItemsSource

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


“DataContext”应用于整个窗口。。。以此为基础,任何控件都可以将其元素“绑定”到数据上下文中几乎任何“公开”可用的内容。。。在本例中,选项的组合框列表来自其“ItemSource”属性。。。因此,您希望ITEMSOURCE指向您的_作业。

要绑定到datacontext的某些内容,需要通过公共getter/setter公开它

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


    public mainmenusql()
    {
       _Jobs = new List<string>();

       // rest of populating your data
    }
}
public类mainmenusql
{
公共工作清单
{get;受保护集;}
公共mainmenusql()
{
_作业=新列表();
//填充数据的其余部分
}
}
窗口控件中的绑定是ItemsSource

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


“DataContext”应用于整个窗口。。。以此为基础,任何控件都可以将其元素“绑定”到数据上下文中几乎任何“公开”可用的内容。。。在本例中,选项的组合框列表来自其“ItemSource”属性。。。因此,您希望ITEMSOURCE指向您的_作业。

缺少对象是因为您从未通过_Jobs=new list()初始化“作业”列表;然后你可以添加到它。要添加到@DRapp所说的内容,你还应该公开它,使它可以作为DataContext的一部分进行访问。好的,这解决了列表的问题,但是我在组合框中仍然没有得到任何东西,我应该使用除{Binding Path=\u Jobs}之外的其他类型的DataContext吗?缺少对象是因为您从未通过_Jobs=new list()初始化“Jobs”列表;然后你可以添加到它。要添加到@DRapp所说的内容,你还应该公开它作为DataContext的一部分进行访问。好的,这解决了列表的问题,但我仍然没有在combobox中得到任何东西,我是否应该使用除{Binding Path=\u Jobs}之外的其他类型的DataContext?这样做给了我一个旧问题“对象引用未设置为对象的实例”。在成员声明中添加=new…give me错误。有什么想法吗?谢谢!我想我们已经成功了!但是组合框显示“由于未知的datacontext,无法解析符号\u作业。谢谢!”!这很好用!我很高兴自己至少走上了正确的道路,我想我现在对这一点理解得更好了。这样做给了我“对象引用未设置为对象实例”的老问题。正在添加=新的。。。给我成员声明中的错误。有什么想法吗?谢谢!我想我们快到了!但是组合框显示“由于未知的数据上下文,无法解析符号作业。谢谢!这非常有效!我很高兴我至少在正确的轨道上,我想我现在更了解这一点了。”。