2016-11-30 169 views
1

把我的頭伸出來。我無法在我的listview內將我的combobox綁定到後面代碼中的列表。Combobox綁定ListView中的WPF

另外,combobox甚至沒有出現在列中..

想要一個在listviewcombobox顯示數字0-24。

XAML:

<ListView Grid.Row="0" Margin="0,0,0,0" Height="250" Width="540" SelectionMode="Single" dd:DragDrop.IsDragSource="True" dd:DragDrop.IsDropTarget="True" x:Name="TasksList"> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn Header ="Day 1" Width="50"> 
       <GridViewColumn.CellTemplate> 
        <DataTemplate> 
         <ComboBox ItemsSource="{Binding Path=ComboBox1}"/> 
        </DataTemplate> 
       </GridViewColumn.CellTemplate> 
      </GridViewColumn> 
     </GridView> 
    </ListView.View> 
</ListView> 

和代碼背後:

public partial class TaskHoursRemaining : Page { 

    List<int> hourOfDay = new List<int>(); 

    public TaskHoursRemaining() { 
     InitializeComponent(); 
     LoadData(); 
     DataContext = this; 
    } 

    private void LoadData() { 
     for (int i = 0; i < 25; i++) { 
      hourOfDay.Add(i); 
     } 
     this.ComboBox1.ItemsSource= hourOfDay; 
    } 
} 

ComboBox1不會在當前的背景下存在。

+0

你在做什麼錯在這裏是,控制是在列表視圖的DataTemplate ,所以你必須綁定ListView和必需的集合 –

回答

1

在XAML中,你綁定到一個不存在的屬性ComboBox1

<ComboBox ItemsSource="{Binding Path=ComboBox1}"/> 

在您的代碼隱藏,你訪問一個不存在的領域ComboBox1

this.ComboBox1.ItemsSource= hourOfDay; 

DataContext = this;聲明在這裏對你沒有任何用處。

要通過XAML創建字段,您應該使用x:Name屬性。這無濟於事,因爲ComboBox駐留在模板中。

@不幸運是正確的,你應該將列表視圖綁定到集合(這實際上是你在你的代碼隱藏中試圖做的)。然後再次,組合框想要一個集合,所以你應該有一個數據模型是一個集合的集合。 (排序 - 所有組合框都需要相同的集合;只有選定的項目會有所不同)。

我們先用TextBox而不是ComboBox進行此項工作。該列表結合hourOfDay,而TextBox顯示int

private readonly List<int> hourOfDay = new List<int>(); 

public MainWindow() 
{ 
    InitializeComponent(); 

    for (int i = 0; i < 25; i++) 
    { 
     this.hourOfDay.Add(i); 
    } 

    this.TasksList.ItemsSource = this.hourOfDay; 
} 

XAML:

<ListView Grid.Row="0" Margin="0,0,0,0" Height="250" Width="540" SelectionMode="Single" x:Name="TasksList"> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn Header ="Day 1" Width="50"> 
       <GridViewColumn.CellTemplate> 
        <DataTemplate> 
         <TextBox Text="{Binding Mode=OneWay}"/> 
        </DataTemplate> 
       </GridViewColumn.CellTemplate> 
      </GridViewColumn> 
     </GridView> 
    </ListView.View> 
</ListView> 

結果:

enter image description here

你想要什麼,雖然是清單有些東西,每個組合框都有1-24的下拉菜單。我不知道有些事情可能是什麼 - 也許是這樣的:

public class Entry 
{ 
    private static readonly List<int> hourOfDay; 

    static Entry() 
    { 
     hourOfDay = new List<int>(); 
     for (int i = 0; i < 25; i++) 
     { 
      hourOfDay.Add(i); 
     } 
    } 

    public IEnumerable<int> HourOfDaySource => hourOfDay; 
} 

在窗口/頁面的構造函數:

InitializeComponent(); 
this.TasksList.ItemsSource = new List<Entry> 
    { 
     new Entry(), 
     new Entry(), 
     new Entry(), 
     new Entry(), 
     new Entry(), 
    }; 

XAML:

<ListView Grid.Row="0" Margin="0,0,0,0" Height="250" Width="540" SelectionMode="Single" x:Name="TasksList"> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn Header ="Day 1" Width="60"> 
       <GridViewColumn.CellTemplate> 
        <DataTemplate DataType="wpf:Entry"> 
         <ComboBox 
          ItemsSource="{Binding HourOfDaySource, Mode=OneWay}" 
          SelectedIndex="12" 
          Width="42" 
         /> 
        </DataTemplate> 
       </GridViewColumn.CellTemplate> 
      </GridViewColumn> 
     </GridView> 
    </ListView.View> 
</ListView> 

結果:

enter image description here

有一個很好的管道需要這個變得有用,但至少你已經有你的ComboBox es填充...