2013-09-26 51 views
0

首先,感谢您抽出时间阅读本文。所有的贡献都非常感谢。XAML - 将DataTemplate中的组合框绑定到集合?

我很难理解如何将DataTemplate中的ComboBox ItemsSource绑定到ObservableCollection。

这里是我的代码迄今:

的DataTemplate模板(在模板底部注意到组合的):

<DataTemplate x:Key="ListBoxCustomTemplate"> 

      <Grid Margin="4" HorizontalAlignment="Stretch" x:Name="lstBoxItemRoomGrid" > 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition /> 
       <ColumnDefinition /> 
      </Grid.ColumnDefinitions> 

      <Grid.RowDefinitions> 
       <RowDefinition /> 
       <RowDefinition /> 
       <RowDefinition /> 
       <RowDefinition /> 
      </Grid.RowDefinitions> 

      <TextBlock Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" FontWeight="Bold" Text="{Binding TemplateGroupName}" /> 

      <Image x:Name="imgDeleteListBoxItem" Grid.Row="0" Grid.RowSpan="2" Grid.Column="1" Source="/Icons/Print-Groups-Config/delete-32.png" Height="25" Cursor="Hand" 
        ToolTip="Remove template" VerticalAlignment="Center" 
        HorizontalAlignment="Right" MouseLeftButtonUp="imgDeleteListBoxItem_MouseLeftButtonUp"> 
       <Image.Style> 
        <Style> 
         <Setter Property="Image.Visibility" Value="Hidden" /> 
         <Style.Triggers> 
          <DataTrigger Binding="{Binding IsMouseOver, ElementName=lstBoxItemRoomGrid}" Value="True"> 
           <Setter Property="Image.Visibility" Value="Visible" /> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
       </Image.Style> 
      </Image> 

      <TextBlock Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Text="{Binding TemplateDescription}" TextWrapping="WrapWithOverflow" /> 

      <!-- Header Template Selection --> 
      <Label Grid.Row="2" Grid.Column="0" Margin="0,3,0,0" HorizontalAlignment="Left" VerticalAlignment="Bottom" Content="Select Header:" FontWeight="DemiBold" Foreground="DarkGray" /> 
      <telerik:RadComboBox x:Name="radComboHeaderTemplate" Grid.Row="3" Grid.Column="0" Width="120" Margin="0,0,0,0" HorizontalAlignment="Left" VerticalAlignment="Center" 
           ClearSelectionButtonVisibility="Visible" SelectedValue="{Binding TemplateHeaderID}" /> 

      <!-- Footer Template Selection --> 
      <Label Grid.Row="2" Grid.Column="1" Margin="0,3,0,0" HorizontalAlignment="Left" VerticalAlignment="Bottom" Content="Select Footer:" FontWeight="DemiBold" Foreground="DarkGray" /> 
      <telerik:RadComboBox x:Name="radComboFooterTemplate" Grid.Row="3" Grid.Column="1" Width="120" Margin="0,0,0,0" HorizontalAlignment="Left" VerticalAlignment="Center" 
           ClearSelectionButtonVisibility="Visible" SelectedValue="{Binding TemplateFooterID}" /> 

     </Grid> 
    </DataTemplate> 

当我的窗口负载,我从我的数据库下载收集数据并存储到本地收藏中。请注意,有两个集合,一个用于DataTemplate中的两个ComboBox。

//Header Templates 
    private ObservableCollection<TemplateHeaderFooter> templatesHeader = new ObservableCollection<TemplateHeaderFooter>(); 

    //Footer Templates 
    private ObservableCollection<TemplateHeaderFooter> templatesFooters = new ObservableCollection<TemplateHeaderFooter>(); 



    //--- Constructors --- 

    public PrintTemplateGroupsConfigWindow() 
    { 
     InitializeComponent(); 

     //Download Data From DB 
     this.templatesHeader = TemplateHeaderFootersDB.GetAllTemplatesOfType(1); 
     this.templatesFooters = TemplateHeaderFootersDB.GetAllTemplatesOfType(2); 
    } 

我如何收集数据templatesFooters & templatesHeader纳入各自的组合框的的ItemsSources?

该数据模板用于ListBox。

<telerik:RadListBox x:Name="lstBoxPrintGroupTemplates" Height="300" Width="280" ItemsSource="{Binding}" IsEnabled="False" 
          ItemTemplate="{StaticResource ListBoxCustomTemplate}" Style="{StaticResource DraggableListBox}" > 

非常感谢。任何帮助表示赞赏。

回答

1

定义在你的收藏中的变量特性的包装,然后你可以将它们绑定到组合框为:

ItemsSource="{Binding TemplatesHeader, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" 

public ObservableCollection<TemplateHeaderFooter> TemplatesHeader 
{ 
    get{return templatesHeader;} 
} 

同样可以为其他财产

+0

非常感谢你做的。您的解决方案完美运作 – RobHurd