2016-10-28 8 views
1

チェックボックスアイテムを含むリストボックスアイテムが4つあります。私は同じデータセットからそれらをバインドしようとしていますが、私はそれを正しくしていないようです。私がこのようにバインドすると、リストボックスの4番目のアイテムだけがアイテム名を表示し、残りのアイテムは空白のチェックボックスのみを表示します。WPF - 同じデータセットから複数のリストボックスアイテムをデータバインドする方法

また、この方法でチェックボックスをバインドするかどうかを知りたいのですが、選択されたデータベースのID値に後でアクセスするにはどうすればいいですか?(Contentのみを設定し、selectedValuePathなどを設定しませんでした。ここで

は、以下の私のコードです:

これに代え

XML

<ListBox x:Name="listBox1" ItemsSource="{Binding}" HorizontalAlignment="Left" Height="52" Margin="141,264,0,0" VerticalAlignment="Top" Width="307" SelectionMode="Multiple"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <CheckBox x:Name="checkBox1" Content="{Binding NacinGrejanja}"/> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 
     <Label Content="Tip Objekta:" HorizontalAlignment="Left" Margin="30,323,0,0" VerticalAlignment="Top"/> 
     <ListBox x:Name="listBox2" ItemsSource="{Binding}" HorizontalAlignment="Left" Height="26" Margin="141,323,0,0" VerticalAlignment="Top" Width="307"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <CheckBox x:Name="checkBox1" Content="{Binding TipObjekta}"/> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 
     <Label Content="Opis Objekta:" HorizontalAlignment="Left" Margin="31,366,0,0" VerticalAlignment="Top"/> 
     <ListBox x:Name="listBox3" ItemsSource ="{Binding}" HorizontalAlignment="Left" Height="52" Margin="142,366,0,0" VerticalAlignment="Top" Width="307"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <CheckBox x:Name="checkBox3" Content="{Binding OpisObjekta}"/> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 
     <Label Content="Dodatno:" HorizontalAlignment="Left" Margin="31,437,0,0" VerticalAlignment="Top"/> 
     <ListBox x:Name="listBox4" ItemsSource ="{Binding}" HorizontalAlignment="Left" Height="52" Margin="142,437,0,0" VerticalAlignment="Top" Width="307"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <CheckBox x:Name="checkBox4" Content="{Binding Dodatno}" /> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 

C#

private void Window_Loaded_1(object sender, RoutedEventArgs e) 
    { 
     Dataset1 ds= new Dataset1(); 
     GrejanjeTableAdapter gta = new GrejanjeTableAdapter(); 
     TipObjektaTableAdapter tta = new TipObjektaTableAdapter(); 
     OpisObjektaTableAdapter ota = new OpisObjektaTableAdapter(); 
     DodatnoTableAdapter dta = new DodatnoTableAdapter(); 
     gta.Fill(ds.Grejanje); 
     tta.Fill(ds.TipObjekta); 
     ota.Fill(ds.OpisObjekta); 
     dta.Fill(ds.Dodatno); 
     this.DataContext = ds.Grejanje; 
     this.DataContext = ds.TipObjekta; 
     this.DataContext = ds.OpisObjekta; 
     this.DataContext = ds.Dodatno; 
    } 

答えて

1

this.DataContext = ds.Grejanje; 
    this.DataContext = ds.TipObjekta; 
    this.DataContext = ds.OpisObjekta; 
    this.DataContext = ds.Dodatno; 

あなたはこの試してみてください:

listbox1.ItemsSource = ds.Grejanje; 
    listbox2.ItemsSource = ds.TipObjekta; 
    listbox3.ItemsSource = ds.OpisObjekta; 
    listbox4.ItemsSource = ds.Dodatno; 

の項目にはItemsSource="{Binding}"は必要ありません。

選択した項目を取得するには、あなたがこのように、IsCheckedブール型プロパティにCheckBoxアイテムのIsCheckedプロパティをバインドする必要があります。そして、あなたがすべき、NacinGrejanjaIsCheckedプロパティが含まれていない場合

<CheckBox x:Name="checkBox1" IsChecked={Binding IsSelected} Content="{Binding NacinGrejanja}"/> 

それを含むクラスでラップします。

NacinGrejanjaのIDはインスタンス内に含める必要があります。そのため、選択したアイテムのIDを取得する際に問題は発生しません。そうでない場合は、再びクラスでラップします。

+0

これは動作しましたが、ListBoxにItemsSource = "{Binding}"を入れないと、checkBoxアイテムのテキストが表示されませんでした。また、NacinGrejanjaのIDの意味を理解しているとは思いませんか? – Adicili

+0

IDの事に関しては、私はあなたの質問に答えていた "選択されたデータベースからID値に後でアクセスする方法" –

+0

もう一度、私はまだチェックボックスが選択されているかどうかをチェックする方法と苦労しているデータベースから値を取得します。私が開いたこの新しいトピックを見てください:http://stackoverflow.com/q/40452039/5721684。ありがとうございました – Adicili

関連する問題