我想用一个ObservableCollection的值填充DataGrid,ObservableCollection是viewmodel类的一个属性。
不幸的是,以下内容不会产生任何结果。
Page xaml:
<Page.Resources>
<vm:vmProjects x:Key="Projects"/>
</Page.Resources>
<Grid>
<DataGrid x:Name="dgProjects" AutoGenerateColumns="True"
DataContext="{Binding Source=Projects}" ItemsSource="{Binding ProjectList}">
</DataGrid>
</Grid>
</Page>
页码:
vmProjects Projects;
public pgProjects()
{
InitializeComponent();
projects= (vmProjects )this.Resources["Projects"];
LoadList(Projects.ProjectList); // this is a database layer, which fills the collection with value (works, there are items in the collection)
}
答案 0 :(得分:1)
有两种方法可以做到这一点:
首先,由于您正在创建视图模型的实例作为资源,因此您的DataContext绑定是错误的。这非常容易和快速修复:
DataContext="{StaticResource Projects}"
但是因为你的viewmodel似乎是整个页面的视图模型,所以从长远来看,这将简化你的生活:
<Page.DataContext>
<vm:vmProjects />
</Page.DataContext>
<Grid>
<DataGrid
x:Name="dgProjects"
AutoGenerateColumns="True"
ItemsSource="{Binding ProjectList}">
</DataGrid>
</Grid>
现在vmProjects
的同一个实例是整个页面的datacontext,您不需要为DataGrid或任何其他子控件指定它。
在后面的代码中找到它也更简单:
public pgProjects()
{
InitializeComponent();
LoadList(ViewModel.ProjectList);
}
public vmProjects ViewModel => (vmProjects)DataContext;