访问本地资源以将值加载到代码隐藏中的可观察集合

时间:2016-08-01 15:13:04

标签: c# wpf xaml data-binding

我想用一个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)

}

1 个答案:

答案 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;