0

ComboBoxデータベース テーブルからデータをバインドしようとしています。私はこのチュートリアルhttp://blog.cylewitruk.com/2010/09/wpf-combobox-and-databinding-datacontext-itemssource-displaymemberpath-selecteditem-selectedvalue-selectedvaluepath/に従いましたが、彼は手動でデータを追加することによってのみデータをバインドします。

データベースからデータをフェッチするメソッドを追加しようとすると、Window.DataContext で以下のエラーが発生します。

オブジェクト参照がオブジェクト インスタンスに設定されていません。

にデータを入力するコードをどこに追加すればよいComboBoxですか?

これは私のxamlファイルです。

<Window 
x:Name="windowMain" 
x:Class="QSMSystemView.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Quickserve Marketing Inventory and Accouting System" Height="437" Width="499"
xmlns:ViewModels="clr-namespace:QSMSystemView">

<Window.DataContext>
    <ViewModels:ProductViewModel />
</Window.DataContext>
...

<ComboBox x:Name="comboBoxSupplier" 
          ItemsSource="{Binding Suppliers, Mode=OneWay}"
          DisplayMemberPath="Name"
          SelectedValue="{Binding SelectedProductSupplier}"
          SelectedValuePath="ID"
          />

これは私のビューモデルです:

public class ProductViewModel : ViewModel
{

    private SuppliersModel suppliersModel;

    public ObservableCollection<Supplier> Suppliers { get; set; }

    private Int16 selectedProductSupplier;

    public Int16 SelectedProductSupplier
    {
        get { return this.selectedProductSupplier; }
        set
        {
            this.selectedProductSupplier = value;

            this.NotifyPropertyChanged("SelectedProductSupplier");
        }
    }

    public ProductViewModel()
    {
        this.Suppliers = new ObservableCollection<Supplier>();
        this.suppliersModel = new SuppliersModel();
        this.GetSuppliersFromDatabase();
    }

    public void GetSuppliersFromDatabase()
    {
        foreach (Supplier supplier in suppliersModel.All())
        {
            Console.WriteLine("Id: " + supplier.ID);
            Console.WriteLine("name: " + supplier.Name);
            this.Suppliers.Add(supplier);
        }
    }

}

これは私のサプライヤークラスです。

public class Supplier
{
    public Int16 ID { get; set; }
    public String Name { get; set; }

    public Supplier(Int16 id, String name)
    {
        this.ID = id;
        this.Name = name;
    }
}

注: データベースからデータを取得しようとせず、次のように手動で Supplier を入力するだけの場合: this.Supplier.Add(new Supplier(1, "foo"); の場合、私のコードはエラーなしで実行されます。

4

0 に答える 0