2010-01-16 2 views
8

ItemsSource에 이미 데이터가있는 경우 WPF DataGrid에서 데이터 소스가 비어있을 때 행을 추가 할 수 없음

CanUserAddRows="True" 만 '작동'합니다. 원래 항목 목록에 행이 없으면 CanUserAddRows="True"을 설정했지만 DataGrid에 새 항목을 입력하는 placeholder 행이 표시되지 않습니다. 왜?!

미리 감사드립니다. Trindaz

+0

또한 화면에서 벗어난 열을 보려면 오른쪽으로 스크롤 할 수 없기 때문에 항목이없는 가로 스크롤 막대가 없어집니다. –

답변

2

는 WPF DataGrid에 알려진 문제가 될 수 있습니다. 토론 here (네 번째 주석에서 시작) 또한 net. 4에서 수정 된 것으로 보입니다. 3.5 및 4 (beta2) 프레임 워크에서이 문제에 대한 몇 가지 테스트를 수행했습니다. TestGridItem 이하이고

public class TestGridItems0 : ArrayList 
{ 
} 

public class TestGridItems1 : List<TestGridItem> 
{ 
} 

public class TestGridItems2<T> : List<TestGridItem> 
{ 
} 

:

public class TestGridItem 
{ 
    public string One { get; set; } 
    public string Two { get; set; } 
    public string Three { get; set; } 
} 

.NET 3.5

TestGridItems0 및 TestGridItems1 PLS 아래 결과 참조 :

먼저 I 아이템 컬렉션의 3 종류를 정의 빈 콜렉션에 빈 줄을 표시하지 않았습니다. 어디로 TestGridItems2 괜찮 았어.

.NET 4

만 TestGridItems0 빈 컬렉션의 라인을 보여주지 않았다; 다른 2 명은 잘 작동했습니다. 그리드에 대한

XAML :이 도움이

dataGrid.ItemsSource = new TestGridItems0(); 
dataGrid.ItemsSource = new TestGridItems1(); 
dataGrid.ItemsSource = new TestGridItems2<TestGridItem>(); 

희망,

+0

간단한'.ToList()'변환으로 문제가 해결되었습니다. 힌트를 가져 주셔서 감사합니다. –

1

당신의 ItemsSource에 빈 항목을 추가하고 제거에 관하여 : 아래

<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> 

항목 소스가 할당하는 방법이다 그것. 이 작업을 수행 한 후 CanUserAddRows를 true로 설정해야 할 수도 있습니다. 이 솔루션을 읽었습니다 here : (Jarrey 및 Rick Roen의 게시물)

ItemsSource를 DataTable의 DefaultView로 설정하고 뷰가 비어있을 때이 문제가 발생했습니다. 열은 정의되었으므로 가져올 수 있어야했습니다. ㅎ.