【发布时间】:2020-03-07 14:09:35
【问题描述】:
我正在使用数据网格,通过 TwoWay 绑定绑定到 observablecollection。 我的目标是,用户从一个空集合开始生成一个数据列表。 所以我启用了 CanUserAddRow 选项。
在代码中,我使用以下代码生成可观察集合:
private ObservableCollection<Ticket> idlessTicketList = new ObservableCollection<Ticket>();
ObservableCollection 包含的 Ticket 类如下所示:
public class Ticket
{
public Ticket() { }
public bool ticketUsed { get; set; }
public string ticketNumber { get; set; }
public string ticketCustomer { get; set; }
public string ticketText { get; set; }
public double ticketTime { get; set; }
public Decimal ticketTypeNr { get; set; }
public string ticketTypeText { get; set; }
}
在 MainWindow 方法中,我将 Datagrid 的 itemSource 设置为 ObservableCollection:
public MainWindow()
{
InitializeComponent();
gridIdlessTickets.ItemsSource = idlessTicketList;
}
我现在的问题是,添加新行的空行在启动时不显示。 如果我通过代码 myGridd.Add(row) 添加新行,则空行将正确显示,并且一切正常。
必须如何初始化 ObservableCollection 并正确引用 itemSource? 初始化 itemSource 的最佳位置在哪里?
提前致谢
【问题讨论】:
-
将
CanUserAddRows="True"添加到您的DataGrid。 -
我就是这么做的。这有效。但它只有在已经添加了一行时才有效。如果 ObservableCollection 为空,则初始化后,该行不可见。
-
设置项目源的最佳位置是在 XAML 数据网格中。 ItemsSource="{绑定 idlesTicketList}"。对于数据绑定,您需要一个 DataSource,它可能是本示例中的代码隐藏(通常应该是 ViewModel)。
-
基本上,如果您希望数据网格中的第一行为空,则需要将项目源设置为可观察集合,将数据源设置为可观察集合所在的类,并在需要实例化的构造函数内部您的可观察集合(作为空集合)。这样(因为有一个空列表)数据网格将在视图显示时在开始时为您提供一个空行。
标签: c# wpf datagrid observablecollection itemsource