2016-08-04 16 views
1

をlinq2sqlするコンボボックスを結合私はコンボボックス持ちながら:WPF例外

<ComboBox Name="cmbSuppliers" ItemsSource="{Binding}" Grid.Column="1" Grid.Row="0" Height="30"></ComboBox> 

この方法でそれをバインドしようとしている:私は(最後の行に)例外を取得

public void BindSuppliers() 
    { 
     using (ScanFlowDataClassesDataContext db = new ScanFlowDataClassesDataContext(GlobalConfig.connectionString)) 
     { 
      var suppliers = from s in db.Suppliers 
         select new 
         { 
          Id = s.Id, 
          Name = s.Name, 
         }; 
      cmbSuppliers.DisplayMemberPath = "Name"; 
      cmbSuppliers.SelectedValuePath = "Id"; 
      cmbSuppliers.ItemsSource = db.Suppliers.Select(s => s).OrderBy(s => s.Name); 
     } 
    } 

を言って: "指定されたキャストは無効です。 '

私はこれを解決するのを手伝ってください!

+1

'のItemsSource =後で背後にあるコードでItemsSourceプロパティを設定すると、XAML内の冗長ようだ' "{バインディング}"。それに加えて、 'db.Suppliers.Select(s => s)'は意味をなさないと思われます。おそらく 'cmbSuppliers.ItemsSource = suppliers.OrderBy(s => s.Name);と書いたかったのですか? – Clemens

+0

dbオブジェクトがEntityFramework datacontextオブジェクトであると仮定します。 EntityFrameWorkからの常にdbコンテキストはIQueryableを返します。あなたはこのようにリストに変換する必要があります。cmbSuppliers.ItemsSource = db.Suppliers.OrderBy(s => s.Name).ToList(); –

答えて

0

あなたはこのような何かを試みることができる:

<ComboBox Name="cmbSuppliers" Grid.Column="1" Grid.Row="0" Height="30"> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Item2} /> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 

方法:

public void BindSuppliers() 
    { 
     using (ScanFlowDataClassesDataContext db = new ScanFlowDataClassesDataContext(GlobalConfig.connectionString)) 
    { 
     var suppliers = from s in db.Suppliers 
      select new Tuple<int,string>(s.Id, s.Name); 
     cmbSuppliers.DisplayMemberPath = "Item2"; 
     cmbSuppliers.SelectedValuePath = "Item1"; 
     cmbSuppliers.ItemsSource = suppliers.OrderBy(s => s.Item2); 
    } 
} 
関連する問題