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"); の場合、私のコードはエラーなしで実行されます。