以编程方式创建包含数据模板和绑定数据的列表框
本文关键字:数据 绑定 列表 编程 方式 创建 包含 | 更新日期: 2023-09-27 18:36:13
我正在开发Windows商店应用程序。有没有办法以编程方式使用数据模板创建列表框,然后将数据绑定到数据模板项?
我已经创建了这个列表框,但现在我需要以编程方式创建相同的列表框,因为我需要动态创建列表框(列表框计数是动态的),
第二个问题:我需要将文本绑定到列表框数据模板项。有人知道要向我推荐什么吗?
XAML:
<ListBox x:Name="lbTransitNow" ItemsSource="{Binding MyDataBusStationsCurrent}" SelectionChanged="LbTransitNow_OnSelectionChanged">
<ListBox.ItemTemplate>
<DataTemplate >
<StackPanel>
<Grid x:Name="gridTodayBtn">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock x:Name="tbTransitStart" Grid.Column="0" Text="{Binding Lines_departure_date}" />
<TextBlock x:Name="tbTransitEnd" Grid.Column="1" Text="{Binding Lines_arrival_date}" />
</Grid>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
法典:
foreach (var routs in cpStationsrs.RoutesList)
{
foreach (var lines in routs.LinesList)
{
foreach (var stops in lines.StopsList)
{
_myDataBusStationsChoosen.Add(new BindingData
{
Lines_stops_nameSub = stops.Name,
Lines_stops_timeSub = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, stops.Time.Hour, stops.Time.Minute, 0).ToString("dd.MM.yyyy -- HH:mm"),
Lines_nameSub = lines.Name,
...
});
}
}
}
OnPropertyChanged("MyDataBusStationsChoosen");
据我所知,没有办法在WinRT中以编程方式创建DataTemplate。但是,如果我正确理解您的问题,您可以对所有列表框重复使用相同的模板......因此,您只需在资源中声明模板,并在每个 ListBox 中引用它。
<Page.Resources>
<DataTemplate x:Key="myItemTemplate">
<StackPanel>
<Grid x:Name="gridTodayBtn">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock x:Name="tbTransitStart" Grid.Column="0" Text="{Binding Lines_departure_date}" />
<TextBlock x:Name="tbTransitEnd" Grid.Column="1" Text="{Binding Lines_arrival_date}" />
</Grid>
</StackPanel>
</DataTemplate>
</Page.Resources>
然后,在代码中:
var listBox = new ListBox { ItemTemplate = (DataTemplate)Resources["myItemTemplate"] }