CanUserAddRows="True"
только 'работы', когда уже существуют данные в ItemsSource
из DataGrid
. Если это именно так происходит, что нет никаких строк в исходном списке объектов, то DataGrid
не отображает a placeholder
строка для ввода новых объектов, даже при том, что я установил CanUserAddRows="True"
. Почему?!
Заранее спасибо, Trindaz
Это кажется известным вопросом с DataGrid WPF. См. Обсуждение здесь (начиная с 4-го комментариев) Также кажется, что он фиксируется в .NET 4. Я сделал некоторые тесты для этой проблемы на 3,5 и 4 (бета2) каркасах. Пожалуйста, смотрите результаты ниже:
Сначала я определил 3 типа коллекций элементов:
public class TestGridItems0 : ArrayList
{
}
public class TestGridItems1 : List<TestGridItem>
{
}
public class TestGridItems2<T> : List<TestGridItem>
{
}
, где TestGridItem ниже:
public class TestGridItem
{
public string One { get; set; }
public string Two { get; set; }
public string Three { get; set; }
}
.NET 3.5
TestGriditems0 и TestGriditems1 не показал пустую строку для пустой коллекции; где как TestGriditems2 работал нормально.
.NET 4
Только TestGriditems0 не показал линию для пустой коллекции; Другие 2 работали нормально.
XAML для сетки:
<my:DataGrid Name="dataGrid" AutoGenerateColumns="False" CanUserAddRows="True">
<my:DataGrid.Columns>
<my:DataGridTextColumn Binding="{Binding One}" Header="One" />
<my:DataGridTextColumn Binding="{Binding Two}" Header="Two" />
<my:DataGridTextColumn Binding="{Binding Three}" Header="Three" />
</my:DataGrid.Columns>
</my:DataGrid>
Ниже приведено как источник элементов был назначен:
dataGrid.ItemsSource = new TestGridItems0();
dataGrid.ItemsSource = new TestGridItems1();
dataGrid.ItemsSource = new TestGridItems2<TestGridItem>();
Надеюсь, это поможет, считает