2013-10-20 38 views
2

我正在開發Windows商店應用程序。有沒有辦法以編程方式創建一個帶有datatemplate的列表框,然後將數據綁定到數據模板項目?以數據模式和綁定數據編程創建列表框

我創造了這個列表框,但現在我需要以編程方式創建相同的列表框,因爲我需要創建列表框動態(列表框的數量是動態的),

第二個問題:我需要綁定文本列表框數據項目。有人知道要向我推薦什麼嗎?

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"); 
+0

可以以編程方式在WPF中,不是-相當成品框架 –

+0

創建一個DataTemplate,但不是在WinRT中......又缺少功能你爲什麼需要以編程方式創建它,順便說一句? –

+0

難道您不能在XAML中將其創建爲隱藏,然後在準備好時將其可見性屬性更改爲可見?這將允許您像往常一樣通過XAML來完成所有綁定,但在您準備好之前不會顯示列表框。 – philologon

回答

2

據我所知,目前還沒有辦法在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"] }