将ItemsSource绑定到ComboBoxes列

时间:2014-08-14 06:01:13

标签: c# wpf combobox listbox datatemplate

按照标题。该列位于DataTemplate中。 这就是我目前所拥有的:

var test = FindChildControl<ComboBox>(this, "PrintCode") as ComboBox;
        test.ItemsSource = listPrintCode;
        MessageBox.Show(test.Items.Count.ToString());

FindChildControl方法:

private DependencyObject FindChildControl<T>(DependencyObject control, string ctrlName)
    {
        int childNumber = VisualTreeHelper.GetChildrenCount(control);
        for (int i = 0; i < childNumber; i++)
        {
            DependencyObject child = VisualTreeHelper.GetChild(control, i);
            var fe = child as FrameworkElement;
            // Not a framework element or is null
            if (fe == null) return null;

            if (child is T && fe.Name == ctrlName)
            {
                // Found the control so return
                return child;
            }
            DependencyObject nextLevel = FindChildControl<T>(child, ctrlName);
            if (nextLevel != null)
                return nextLevel;
        }
        return null;
    }

XAML - 模板

<DataTemplate x:Key="lbCommsItemSetTemplate">
        <Grid Margin="0" Width="Auto">
            <Grid.RowDefinitions>
                <RowDefinition />
                <RowDefinition />
            </Grid.RowDefinitions>
            <TextBlock Grid.Row="0" Grid.Column="0" Text="Name:" />
            <TextBlock Grid.Row="0" Grid.Column="0" Foreground="Blue" Margin="40,0,0,0"
            Text="{Binding CommonDesc}" />
            <TextBlock Grid.Row="1" Grid.Column="0" Text="Serial:" Margin="0,0,0,0"/>
            <TextBlock Grid.Row="1" Grid.Column="0" Foreground="Blue" Margin="35,0,0,0"
            Text="{Binding Serial}" />
        </Grid>
    </DataTemplate>
    <DataTemplate x:Key="lbIssueTemplate">
        <Grid Margin="0" Width="Auto">
            <Grid.ColumnDefinitions>
                <ColumnDefinition />
                <ColumnDefinition />
                <ColumnDefinition/>
                <ColumnDefinition />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition />
                <RowDefinition />
            </Grid.RowDefinitions>
            <TextBlock Grid.Row="0" Grid.Column="0" Text="Name:" />
            <TextBlock Grid.Row="0" Grid.Column="0" Foreground="Blue" Margin="50,0,0,0"
            Text="{Binding CommonDesc}" />
            <TextBlock Grid.Row="0" Grid.Column="1" Text="Qty:" Margin="10,0,0,0"/>
            <TextBox Grid.Row="0" Grid.Column="1" Foreground="Blue" Margin="35,0,0,0"
                     Text="{Binding LoanQty}" PreviewTextInput="UIElement_OnPreviewTextInput" MaxLength="4"
                     GotKeyboardFocus="UIElement_OnGotKeyboardFocus" MaxLines="1"/>
            <ComboBox x:Name="PrintCode" Grid.Row="0" Grid.Column="2" ItemsSource="{Binding}"
                      SelectedValuePath="PrintCode" DisplayMemberPath="PrintCode"/>
            <CheckBox Grid.Row="0" Grid.Column="3" IsChecked="{Binding PrintShortSerial}"/>
        </Grid>
    </DataTemplate>

XAML - 实现模板的ListBox

<telerik:RadListBox Grid.Row="0" Grid.Column="2" Margin="0, 5, 5, 5"
            x:Name="listBoxIssue" HorizontalAlignment="Left" VerticalAlignment="Top"
            Height="690" Width="793"
            ItemTemplate="{StaticResource lbIssueTemplate}" ItemsSource="{Binding}"
            SelectionMode="Multiple" Drop="ListBoxIssue_OnDrop"/>

消息框只是为了确认&#39; listPrintCode&#39;和&#39; FindChildControl&#39;正在按预期工作。但ComboBox并没有显示任何内容,即使它只是1个ComboBox。如果我将代码应用到普通的ComboBox而不是模板的一部分,那么一切都很好。我认为我的代码中存在一个明显的缺陷,即没有什么似乎适用于列中的所有ComboBox。所以我的问题是,如何将我的ItemsSource绑定为组合框的列?

注意:行数(ComboBox)不固定。

0 个答案:

没有答案