访问本地资源,以将值加载到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)
}

访问本地资源,以将值加载到codeehind中的可观察集合

有两种方法可以做到这一点:

首先,由于您正在创建一个视图模型实例作为资源,因此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;