메인 창이 - 내 DataGrid
만 표시되면 DataGrid
은 0 행을 표시합니다. Source={Binding Source=RowItems}
소스에서바운드 데이터 소스에 항목이있을 때 DataGrid에 행이 표시되지 않는 이유는 무엇입니까?
<DataGrid
AutoGenerateColumns="True"
CanUserAddRows="False"
CanUserReorderColumns="True"
CanUserResizeColumns="True"
DataContext="ClientListViewModel"
ItemsSource="{Binding Source=RowItems}">
<DataGrid.Columns>
<DataGridTextColumn Header="Given Name" Binding="{Binding GivenName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"></DataGridTextColumn>
<DataGridTextColumn Header="Family Name" Binding="{Binding FamilyName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"></DataGridTextColumn>
<DataGridTextColumn Header="Gender" Binding="{Binding Gender, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"></DataGridTextColumn>
<DataGridTextColumn Header="Date of Birth" Binding="{Binding DateOfBirth, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
내 기본보기 모델, ClientListViewModel
의 속성, RowItems
입니다 :
이처럼 내 그리드 모습입니다.
viewmodel은 ClientListView
의 내 머리글에서 호출되는 Read
메서드가 있습니다. 이 문제를 디버깅 할 때 RowItems
항목 원본이 올바르게 채워지는 것을 볼 수 있습니다.
주 화면의 내 초기화 문제의 DataGrid
를 포함하는 UserControl
은 다음과 같습니다
model.Read();
후 중단 점을 넣어
public MainWindow()
{
InitializeComponent();
InitializeListView();
}
private void InitializeListView()
{
var model = new ClientListViewModel();
model.Read();
var view = new ClientListView();
view.DataContext = model;
Content = view;
}
, 그 model.RowItems
속성이 12 개 항목, 아직 DataGrid
쇼를 보여줍니다 행이 없습니다.
내 DataGrid
이 제로 행을 렌더링하는 이유는 무엇입니까?
'{Binding Source = RowItems} '를 사용하면'DataContext'의'RowItems' 속성에 바인딩하지 않고 명시 적으로 설정 한 전체 바인딩 소스 객체가 아닌이 특정 경우에는 ""RowItems "'문자열로 해석됩니다 (8 자로되어 있음). 'Binding Path = RowItems '또는'{Binding RowItems}'와 같이 바인딩에'Path' 대신'Source'를 설정해야합니다. – Grx70
@ Grx70 고마워,하지만 지금은 0 행이있다. 'ItemsSource = "{Binding Path = RowItems}"의'RowItems '에 마우스를 올려 놓으면 해당 목록 속성에는 12 개의 항목이 있지만 행은 없다는 것을 알 수 있습니다! – ProfK
그 이유는 명시 적으로'DataGrid.DataContext = "ClientListViewModel"'을 설정했기 때문이며, 다시''ClientListViewModel ''이라는 문자열로 해석됩니다.이 문자열은'RowItems'라는 속성을 갖지 않습니다. 'DataGrid'가'ClientListView'의 일부인 경우'DataGrid.DataContext' 설정을 생략 할 수 있습니다 (기본적으로'ClientListView'에서 상속받습니다). 그렇지 않으면 아마도'ClientListViewModel' 인스턴스로 해석 될 적절한 바인딩을 사용해야합니다. 데이터 바인딩 개요 (https://docs.microsoft.com/en-us/dotnet/framework/wpf/data/data-binding-overview) 문서를 참조하십시오. – Grx70