2016-07-08 166 views
0

編程的ListView我有一個ListView WPF中添加組合框在WPF

<ListView Name="listArea"> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn x:Name="colName" Header="نام تحویلدار" Width="150" DisplayMemberBinding="{Binding Path=name}"/> 
      <GridViewColumn x:Name="colComboBox" Header="منطقه" Width="120" DisplayMemberBinding="{Binding Path=cb}"/> 
      </GridView> 
    </ListView.View> 
</ListView> 

我想補充項目列表視圖。第一列是文本,secound是comboBox。

foreach(personel ptahvildar in STATICS.db.personels.Where(q=>q.postCode==2)) 
{ 
    ListViewItem item = new ListViewItem(); 
    ComboBox cbox = new ComboBox(); 
    cbox.ItemsSource = STATICS.db.personels.Where(q => q.postCode == 2); 
    cbox.DisplayMemberPath = "name"; 
    cbox.SelectedItem = ptahvildar; 
    item.Content = new { name = ptahvildar.name, cb = cbox }; 
    listArea.Items.Add(item); 
} 

但結果卻是這樣

result

爲什麼我的組合框無法正確顯示?

回答

0

您應修改ListView.itemTemplate property並添加數據模板。

對數據模板使用項目模板,您可以爲列表視圖中的每個行項目添加複選框,組合框,文本框,按鈕等。 Here就是SO中的一個答案。

<ListView ItemsSource="{Binding Links}" x:Name="ListView1"> 
     <ListView.ItemTemplate> 
      <DataTemplate> 
       <Border> 
        <Button Command="{Binding ElementName=ListView1, Path=DataContext.GetOddsCommand}" CommandParameter="{Binding}"> 
         <TextBlock Text="{Binding}" /> 
        </Button> 
       </Border> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
</ListView> 

除非你只需要使用一個組合框,而不是一個按鈕,並使用合適的綁定..

+0

每個combobox.selecteditem依賴於另一列的值...我如何通過另一列值後面的代碼和改變comboBox selecteditem? – abbas

+0

CommandParameter負責將值傳遞給Command。您可以將項目中的特定字段(列)傳遞給事件。正如我所說的,你必須使用適當的綁定,因爲我只是從SO中的一些答案中提取樣本。 –