【问题标题】:Getting empty combobox dropdown in WPF在 WPF 中获取空的组合框下拉菜单
【发布时间】:2018-12-30 18:37:58
【问题描述】:

我正在尝试填充 Grid 列中的下拉列表,但它是空的。 Grid 列的定义如下:

                <DataGridTemplateColumn  Header="Voucher Type" >
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding VoucherType}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
                <DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>
                        <ComboBox SelectedItem="{Binding VoucherType}" ItemsSource="{Binding Path=DataContext.VTypes, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellEditingTemplate>
            </DataGridTemplateColumn>

上下文类的源定义如下:

        public static ObservableCollection<string> VType { get; } = new ObservableCollection<string>()
    {
        "Journal Voucher",
        "Cash Received Voucher",
        "Cash Payment Voucher",
        "Bank Received Voucher",
        "Bank Payment Voucher",
    };

谁能指出我做错了什么?

谢谢。

【问题讨论】:

标签: wpf datagrid


【解决方案1】:

这里是如何在 DataGrid 中添加组合框的简单代码。

Xaml 代码:

<Grid>
    <DataGrid Margin="5" ItemsSource="{Binding}" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
            <DataGridTextColumn Header="Capital" Binding="{Binding Capital}"/>
            <DataGridTextColumn Header="Time Zone" Binding="{Binding TimeZone}"/>
            <DataGridTemplateColumn Header="Cities" Width="*">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <ComboBox Margin="2" ItemsSource="{Binding Cities}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>
</Grid>

private ObservableCollection<State> states = new ObservableCollection<State>();
   public MainWindow()
    {
        InitializeComponent();

        states.Add(new State()
        {
            Name = "Maryland",
            Capital = "Annapolis",
            TimeZone = "Eastern",
            Cities = new ObservableCollection<string>() { "Frederick", "Baltimore", "Rockville"}
        });

        DataContext = states;
    }
}

型号:

 public class State
{
    public string Name
    { get; set; }

    public string TimeZone
    { get; set; }

    public string Capital
    { get; set; }

    public ObservableCollection<string> Cities
    { get; set; }
}

希望这段代码对你有所帮助。

【讨论】:

  • 这不能回答 OP 的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-08
  • 1970-01-01
  • 2012-02-03
  • 1970-01-01
  • 2018-02-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多