0

私がやろうとしているのは、単純にコンボボックスに 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>

ここで何が間違っていますか?

4

1 に答える 1

3

データコンテキストの何かにバインドするには、パブリックゲッター/セッターを介して公開する必要があります...

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 を指している必要があります。

于 2013-06-13T00:27:29.303 に答える