2016-05-02 4 views
0

Observable Collectionに格納されているCar Objectsでいっぱいのリストボックスを作成しています。彼らは2つの文字列を含む以下オブジェクトはObservableCollectionリストからListBoxに呼び出された後に表示されません。しかしそれはまだ存在し、選択可能です

var ListQuery = from c in db.Cars 
        select c; 

foreach (var car in ListQuery) 
{ 
    Car c1 = new Car(car.ID, car.Make, car.Model, car.Size); 
    CarList.Add(c1); 
} 

Carクラスをされています

私は車のクラスオブジェクトにそれらを作り、次のように監視可能なコレクションのCarListにそれらを格納し、LINQのデータベースから車の詳細を取っていますとして保存されます。

public class Car 
    { 
     public int ID { get; set; } 
     public string Make { get; set; } 
     public string Model { get; set; } 
     public string Size { get; set; } 

     public Car (int id, string make, string model, string size) 
     { 
      Size = size; 
      Make = make; 
      Model = model; 
      ID = id; 
     } 

     public override string ToString() 
     { 
      return string.Format("{0} - {1}", Make, Model); 
     } 

     //This method is for displaying the selected listbox Item's details in a textbox. 
     public string GetDetails() 
     { 
      return string.Format("CarID: {0}\nMake: {1}\nModel: {2}\n", 
        ID, Make, Model); 

     } 

最後に、ボタンを押すと、リストボックスにCarList項目が設定されます。

private void btn_Search_Click(object sender, RoutedEventArgs e) 
{ 
    lbx_CarList.ItemsSource = CarList; 
} 

オブジェクトはリストボックスを満たし、選択可能ですが表示されません。私はクラス内のToString()メソッドが表示されているものだと思ったでしょうが、そうではありません。

以下は、WPFウィンドウと、リストボックス内のアイテムが選択されたときの表示内容を示しています。 When code runs and listbox is populated with Car class objects from CarList Observable Collection

誰かが私が紛失しているか、オブジェクトアイテムの文字列を表示する方法を知っていますか?私は

lbx_CarList.ItemsSource = CarList.ToString() 

CarList.ToList() 

が、無駄とを試してみました。私はそれが私が逃した明らかなものではないことを願っています。どんな助けも素晴らしいだろう!ありがとうございました。

編集:Xamlが追加されました。私が取り出した余分なものがいくつかあったので、質問に関連するコードだけが残りました。

<Window x:Class="FinalProject.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:FinalProject" 
    mc:Ignorable="d" 
    Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded"> 
    <Grid> 

    <Label x:Name="label3" Content="Available Cars" HorizontalAlignment="Left" Margin="53,184,0,0" VerticalAlignment="Top" FontWeight="Bold"/> 
    <ListBox x:Name="lbx_CarList" HorizontalAlignment="Left" Height="99" Margin="53,210,0,0" VerticalAlignment="Top" Width="233" DisplayMemberPath="Description" SelectedValuePath="ID" SelectionChanged="lbx_CarList_SelectionChanged"/> 
    <TextBlock x:Name="tbk_CarDetails" HorizontalAlignment="Left" Margin="319,210,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Height="99" Width="146" ClipToBounds="True"/> 
    <Label x:Name="label4" Content="Selected Car" HorizontalAlignment="Left" Margin="319,184,0,0" VerticalAlignment="Top" RenderTransformOrigin="0.421,-0.115" FontWeight="Bold"/> 
    <Image x:Name="img_Car" HorizontalAlignment="Left" Height="100" Margin="319,56,0,0" VerticalAlignment="Top" Width="158"/> 

    <Button x:Name="btn_Search" Content="Search" HorizontalAlignment="Left" Margin="167,159,0,0" VerticalAlignment="Top" Width="75" Click="btn_Search_Click"/> 

</Grid> 

+0

xamlを表示する – Eldho

+0

あなたのバインディングのパス部分が不足している可能性があります。 @Eldhoが既に尋ねたようにXAMLを表示 – Pikoh

+0

上記のXamlが追加されました。ありがとうございました –

答えて

1

あなたModelは、あなたがリストを表示したり、アイテムを表示することの背後にあるコードを使用するBindingを使用することができます

<ListView Name="ListView"ItemsSource="{Binding YourCollection}"> 
     <ListView.ItemTemplate> 
      <DataTemplate> 
       <WrapPanel> 
        <TextBlock Text="{Binding Path=ID}"/> 
        <TextBlock Text="{Binding Path=Make}"/> 
       </WrapPanel> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
    </ListView> 

XAML

[INotifyPropertyChangedInterface][1]

public event PropertyChangedEventHandler PropertyChanged; 

private void NotifyPropertyChanged(String info) 
{ 
    if (PropertyChanged != null) 
    { 
     PropertyChanged(this, new PropertyChangedEventArgs(info)); 
    } 
} 


public class Car 
{ 
    private string _make ; 
    public string Make 
    { 
     get { return _make ; } 
     set 
     { 
     _make = value; 
     //This will update each time you set a value to the userinterface 
     NotifyPropertyChanged("Make"); 
     } 
    } 
} 

を実装する必要があります。 MVVMを見ると、ユーザーインターフェイスでオブジェクトをバインドする方法をバインドする方法についていくつかのアイデアが出てきます。

関連する問題