2016-11-30 145 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填充...