访问本地资源,以将值加载到codeehind中的可观察集合
本文关键字:codeehind 集合 观察 加载 资源 访问 | 更新日期: 2023-09-27 17:59:47
我想用ObservableCollection的值填充DataGrid,ObservableSet是视图模型类的属性。
遗憾的是,以下内容没有产生任何结果。
第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)
}
有两种方法可以做到这一点:
首先,由于您正在创建一个视图模型实例作为资源,因此DataContext绑定是错误的。这是非常容易和快速修复:
DataContext="{StaticResource Projects}"
但是,由于您的视图模型似乎是整个页面的视图模型,从长远来看,这将更加简化您的生活:
<Page.DataContext>
<vm:vmProjects />
</Page.DataContext>
<Grid>
<DataGrid
x:Name="dgProjects"
AutoGenerateColumns="True"
ItemsSource="{Binding ProjectList}">
</DataGrid>
</Grid>
现在,vmProjects
的同一实例是整个页面的数据上下文,您不需要为DataGrid或任何其他子控件指定它。
在代码后面也更简单:
public pgProjects()
{
InitializeComponent();
LoadList(ViewModel.ProjectList);
}
public vmProjects ViewModel => (vmProjects)DataContext;