【问题标题】:How do i populate a Combobox in a Datagrid with a List in WPF如何使用 WPF 中的列表填充 Datagrid 中的组合框
【发布时间】:2021-06-16 12:06:38
【问题描述】:

如何将包含项目的列表添加到 Datagrid 内的 Combobox?

在 Datagrid 之外(对于普通的组合框)我可以做

List<string> myStringList = new List<string>();
    myStringList.Add("Item 1");
    myStringList.Add("Item 2");

ComboTest.ItemsSource = myStringList;

这将填充 ComboTest 组合框,带有 2 个选项“项目 1”和“项目 2”

在 XML 方面,我也无法使用 ItemsSource="{Binding ...} 选项填充它

XML 代码如下所示

                    <DataGridComboBoxColumn x:Name="comboTest" Width="*">
                        <DataGridComboBoxColumn.Header>
                            <TextBlock Text="Status" TextWrapping="Wrap"/>
                        </DataGridComboBoxColumn.Header>
                    </DataGridComboBoxColumn>

并且前面提到的两个选项都不适用于&lt;DataTemplate&gt; 中的组合框。

如果我将 Combobox 放在 &lt;DataTemplate&gt; 中,它将显示 Combobox 但将为空,我将无法从 C# 代码中为其指定值。如果我使用上面显示的代码,它甚至根本不会显示 Combobox

【问题讨论】:

标签: c# wpf datagrid


【解决方案1】:

例如,您可以使用添加到窗口或用户控件的 XAML 标记中的 CollectionViewSource

<Window x:Class="WpfApp1.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            mc:Ignorable="d"
            Title="Window26" Height="450" Width="800">
    <Window.Resources>
        <CollectionViewSource x:Key="items" />
    </Window.Resources>
    ...

以编程方式将其Source 属性设置为您的列表:

(Resources["items"] as CollectionViewSource).Source = myStringList;

...并将列绑定到 XAML 标记中的 CollectionViewSource

<DataGridComboBoxColumn ItemsSource="{Binding Source={StaticResource items}}" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    • 1970-01-01
    相关资源
    最近更新 更多