无法解析类型为''namespace.class'的数据上下文中的属性'myObservableCollection'

时间:2014-09-23 07:17:56

标签: c# wpf data-binding datagrid observablecollection

我有一个名为Stockage的类,它继承了INotifyPropertyChanged。 此类设置一些字符串,然后创建ObservableCollections的ObservableCollection。此ObservableCollection将值发送到之前设置的几个字符串。

像这样:

public class Stockage:INotifyPropertyChanged
{
    public string Flag { get; set; }
    public string GroupeAlerte { get; set; }
    public string Pmid { get; set; }
    public string LibellePmrq { get; set; }
    public string Ligne { get; set; }
    public string Otm { get; set; }
    public string Totm { get; set; }
    public string LibelleTotm { get; set; }
    public string Discipline { get; set; }
    public string DisciplineSubstituee { get; set; }
    public string Remarque { get; set; }

    public static ObservableCollection<Stockage> result = new ObservableCollection<Stockage>();

    public static ObservableCollection<Stockage> Load(ObservableCollection<Resultat> listResult,
        ObservableCollection<D98Equipements> equipementses, 
        ObservableCollection<D98Details> detailses, 
        ObservableCollection<D675> d675Ses, 
        ObservableCollection<Activite> activitees)
    {

        foreach (var resultat in listResult)
        {

            result.Add(new Stockage{Flag=activitees.FirstOrDefault(e=>resultat.TOTMPMRQ == e.PMRQTOTMActivite).Flag.ToString(), 
                Pmid = listResult.FirstOrDefault(e=>resultat.TOTMPMRQ == e.TOTMPMRQ).TOTMPMRQ.Substring(0,8),
                LibellePmrq = listResult.FirstOrDefault(e => resultat.TOTMPMRQ == e.TOTMPMRQ).LibelléTOTApres,
                GroupeAlerte = listResult.FirstOrDefault(e => resultat.TOTMPMRQ == e.TOTMPMRQ).Groupe_D_alerte,
                Ligne = listResult.FirstOrDefault(e => resultat.TOTMPMRQ == e.TOTMPMRQ).TOTMPMRQ.Substring(8, 2),
                Otm = listResult.FirstOrDefault(e=>resultat.TOTMPMRQ == e.TOTMPMRQ).TOTMPMRQ.Substring(10,8),
                Totm = listResult.FirstOrDefault(e=>resultat.TOTMPMRQ == e.TOTMPMRQ).TOTMPMRQ.Substring(18,2),
                LibelleTotm = equipementses.FirstOrDefault(e=>resultat.TOTMPMRQ == e.PMRQTOTM).Libellé,
                Discipline = detailses.FirstOrDefault(e=>resultat.TOTMPMRQ == e.TOTMPMRQ).Discipline,
                DisciplineSubstituee = detailses.FirstOrDefault(e=>resultat.TOTMPMRQ == e.TOTMPMRQ).Discipline,
                Remarque = listResult.FirstOrDefault(e => resultat.TOTMPMRQ == e.TOTMPMRQ).Remarque,
            });


        }
        return result;
    }


    **public event PropertyChangedEventHandler PropertyChanged;
    private void OnPropertyChanged(string property)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(property));
        }
    }**

ObservableCollections在另一个名为ViewModel的类中设置,并且也继承了INotifyPropertyChanged:

class ViewModel:INotifyPropertyChanged
{
    private BDDInterneEntities _BDDInterneEntities;

    public ViewModel()
    {
        _BDDInterneEntities = new BDDInterneEntities();
        ResultatCollection = new ObservableCollection<Resultat>(_BDDInterneEntities.Resultat);
        D98EquipementsCollection = new ObservableCollection<D98Equipements>(_BDDInterneEntities.D98Equipements);
        D98DetailsCollection = new ObservableCollection<D98Details>(_BDDInterneEntities.D98Details);
        D675Collection = new ObservableCollection<D675>(_BDDInterneEntities.D675);
        ActiviteCollection = new ObservableCollection<Activite>(_BDDInterneEntities.Activite);


    }
    public ObservableCollection<Resultat> ResultatCollection { get; set; }
    public ObservableCollection<D98Equipements> D98EquipementsCollection { get; set; }
    public ObservableCollection<D98Details> D98DetailsCollection { get; set; }
    public ObservableCollection<D675> D675Collection { get; set; }
    public ObservableCollection<Activite> ActiviteCollection { get; set; } 


    public event PropertyChangedEventHandler PropertyChanged;

    private void OnPropertyChanged(string property)
    {
        if(PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(property));
            }

    }

我想将ObservableCollections(result)的ObservableCollection发送到DataGrid,因此我将DataGrid绑定到集合,然后将每个DataGridTextColumn与之前设置的相应字符串绑定。像这样:

<DataGrid x:Name="DonneesBrutes" IsReadOnly="True" ItemsSource="{Binding Path=result}" Margin="10,65,0,0" AutoGenerateColumns="False" EnableRowVirtualization="True" RowDetailsVisibilityMode="VisibleWhenSelected">
            <DataGrid.Columns>
                <DataGridTextColumn x:Name="PrisEnCompte" Binding="{Binding Path=Flag}" Header="Pris En Compte"></DataGridTextColumn>
                <DataGridTextColumn x:Name="PMRQ" Width="*" Binding="{Binding Path=Pmid}" Header="PMID"></DataGridTextColumn>
                <DataGridTextColumn x:Name="Ligne" Width="40" Binding="{Binding Path=Ligne}" Header="Ligne" IsReadOnly="True"></DataGridTextColumn>
                <DataGridTextColumn x:Name="LibellePMRQ" Width="*" Binding="{Binding Path=LibellePmrq}" Header="Libellé PMRQ"></DataGridTextColumn>
                <DataGridTextColumn x:Name="OTM" Width="*" Binding="{Binding Path=Otm}" Header="OTM"></DataGridTextColumn>
                <DataGridTextColumn x:Name="TOTM" Width="50" Binding="{Binding Path=Totm}" Header="TOTM"></DataGridTextColumn>
                <DataGridTextColumn x:Name="LibelleTOTM" Width="*" Binding="{Binding Path=LibelleTotm}" Header="Libellé OTM"></DataGridTextColumn>
                <DataGridTextColumn x:Name="GA" Width="70" Binding="{Binding Path=GroupeAlerte}" Header="GA"></DataGridTextColumn>
                <DataGridTextColumn x:Name="Discipline" Width="120" Binding="{Binding Path=Discipline}" Header="Discipline"></DataGridTextColumn>
                <DataGridTextColumn x:Name="DisciplineSubstituee" Width="120" Binding="{Binding Path=DisciplineSubstituee}" Header="Discipline Substituée"></DataGridTextColumn>
                <DataGridTextColumn x:Name="Remarque" Width="*" Binding="{Binding Path=.Remarque}" Header="Remarque"></DataGridTextColumn>

            </DataGrid.Columns>
        </DataGrid>

我之前定义<Window.DataContext> <local:Stockage/> </Window.DataContext>之前,我确切地说我正在使用类Stockage,这个类包含我的ObservableCollection ObservableCollections,result

问题,在我的DataGrid的ItemsSource="{Binding Path=result}"上,结果'无法解析类型为“WpfApplication3.Stockage”的数据上下文中的属性(我的namespace.MyClassContainingMyCollectionResult)

我想我说错了,或者我做了一些禁止的事情。我试图尽可能多地提供关于结果的信息,我称之为结果,如何。希望我提供了足够的信息,但我并不是太模糊。如果遗漏了某些内容,我可以编辑我的代码。

感谢您的帮助,恭喜您将此读完了。

问候。

EDIT1 OnPropertyChanged闪烁,而且,我修改了结果声明。

2 个答案:

答案 0 :(得分:0)

您的问题是result是方法Load中的局部变量,而不是您可以绑定的属性。

答案 1 :(得分:0)

根据您的说法,您已将Window.DataContext设置为Stockage班级的实例:

<Window.DataContext>
    <local:Stockage/>
</Window.DataContext>

然后,您尝试将数据绑定到该类result中的非公共变量,这是您无法做到的。相反,您必须使该变量成为可以绑定数据的公共属性。

此外,您实际上并未调用OnPropertyChanged方法,这意味着您尚未正确实施INotifyPropertyChanged界面。