绑定路径= myObservableCollection属性预期 [英] Binding Path=myObservableCollection Property Expected
问题描述
我有一个名为Stockage的类继承了INotifyPropertyChanged。这个类设置一些字符串,然后创建一个ObservableCollection的ObservableCollection。这个ObservableCollection将值发送到之前设置的几个字符串。
像这样:
public class Stockage:INotifyPropertyChanged
{
public string Flag {get;组; }
public string GroupeAlerte {get;组; }
public string Pmid {get;组; }
public string LibellePmrq {get;组; }
public string Ligne {get;组; }
public string Otm {get;组; }
public string Totm {get;组; }
public string LibelleTotm {get;组; }
public string Discipline {get;组; }
public string DisciplineSubstituee {get;组; }
public string Remarque {get;组; }
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.F irstOrDefault(e => resultat.TOTMPMRQ == e.TOTMPMRQ).TOTMPMRQ.Substring(10,8),
Totm = listResult.FirstOrDefault(e => resultat.TOTMPMRQ == e.TOTMPMRQ).TOTMPMRQ .bstr(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,
});
}
返回结果;
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string property)
{
if(PropertyChanged!= null)
{
PropertyChanged(this,new PropertyChangedEventArgs(property));
}
}
OnPropertyChanged方法称为
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;组; }
public ObservableCollection< D98Equipements> D98EquipementsCollection {get;组; }
public ObservableCollection< D98Details> D98DetailsCollection {get;组; }
public ObservableCollection< D675> D675Collection {get;组; }
public ObservableCollection< Activite> ActiviteCollection {get;组; }
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string property)
{
if(PropertyChanged!= null)
{
PropertyChanged(this,new PropertyChangedEventArgs(property)) ;
}
}
我想发送ObservableCollection ObservableCollections(result)到DataGrid,所以我将DataGrid绑定到集合,然后我绑定每个DataGridTextColumn与之前的对应的字符串。像这样:
< DataGrid x:Name =DonneesBrutesIsReadOnly =TrueItemsSource ={Binding Path = result }Margin =10,65,0,0AutoGenerateColumns =FalseEnableRowVirtualization =TrueRowDetailsVisibilityMode =VisibleWhenSelected>
< DataGrid.Columns>
< DataGridTextColumn x:Name =PrisEnCompteBinding ={Binding Path = Flag}Header =Pris En Compte>< / DataGridTextColumn>
< DataGridTextColumn x:Name =PMRQWidth =*Binding ={Binding Path = Pmid}Header =PMID>< / DataGridTextColumn>
< DataGridTextColumn x:Name =LigneWidth =40Binding ={Binding Path = Ligne}Header =LigneIsReadOnly =True>< / DataGridTextColumn>
< DataGridTextColumn x:Name =LibellePMRQWidth =*Binding ={Binding Path = LibellePmrq}Header =LibelléPMRQ>< / DataGridTextColumn>
< DataGridTextColumn x:Name =OTMWidth =*Binding ={Binding Path = Otm}Header =OTM>< / DataGridTextColumn>
< DataGridTextColumn x:Name =TOTMWidth =50Binding ={Binding Path = Totm}Header =TOTM>< / DataGridTextColumn>
< DataGridTextColumn x:Name =LibelleTOTMWidth =*Binding ={Binding Path = LibelleTotm}Header =LibelléOTM>< / DataGridTextColumn>
< DataGridTextColumn x:Name =GAWidth =70Binding ={Binding Path = GroupeAlerte}Header =GA>< / DataGridTextColumn>
< DataGridTextColumn x:Name =DisciplineWidth =120Binding ={Binding Path = Discipline}Header =Discipline>< / DataGridTextColumn>
< DataGridTextColumn x:Name =DisciplineSubstitueeWidth =120Binding ={Binding Path = DisciplineSubstituee}Header =DisciplineSubstituée>< / DataGridTextColumn>
< DataGridTextColumn x:Name =RemarqueWidth =*Binding ={Binding Path = .Remarque}Header =Remarque>< / DataGridTextColumn>
< /DataGrid.Columns>
< / DataGrid>
我定义< Window.DataContext>
以前,我精确地使用了类库,这个类包含ObservableCollection的ObservableCollections结果。
< local:Stockage />
< /Window.DataContext>
在我的DataGrid 结果
带来预期财产信息,不要提供任何其他信息。 ItemsSource ={Binding Path = result}
如果我尝试在结果之后添加。
,建议计数
或 this [int]
我知道这个主题对我的其他主题看起来很多,无法在'namespace.class类型的数据上下文中解析属性'myObservableCollection' ,以下是第一个。
希望我提供足够的信息,并不太模糊。感谢您的帮助。
问候。
您的 Stockage
类有成员 result
,但它不是一个 public
属性应该是:
public static ObservableCollection< Stockage> result =
new ObservableCollection< Stockage>();
这是一个 public static
em> not 属性。应该这样定义:
private ObservableCollection< Stockage> result = new ObservableCollection< Stockage>();
public ObservableCollection< Stockage>结果
{
get {return result; }
set {result = value; OnPropertyChanged(Result);注意如何调用$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ code>方法报告属性更改...您的属性的所有应该这样做... 是 INotifyPropertyChange
界面。
I have a class called Stockage which inherit of INotifyPropertyChanged. this class set some strings and then create an ObservableCollection of ObservableCollections. This ObservableCollection send values to the several strings set before.
Like this:
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));
}
}
The method OnPropertyChanged is called just above
the ObservableCollections are set in an other class called ViewModel and inherit of INotifyPropertyChanged too:
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));
}
}
I want to send the ObservableCollection of ObservableCollections (result) to a DataGrid, so I bind the DataGrid to the collection and then I bind each DataGridTextColumn with it's corresponding string set before. Like this:
<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>
I define <Window.DataContext>
<local:Stockage/>
</Window.DataContext>
before, I precise I'm using the class Stockage, the class containing my ObservableCollection of ObservableCollections, result.
The problem, on the ItemsSource="{Binding Path=result}"
of my DataGrid, result
bring the message "Property Expected" and don't give any other information..
If I try to ad a .
after result, It suggest Count
or this[int]
I know this subject looks like a lot to my other topic Cannot resolve property 'myObservableCollection' in data context of type ''namespace.class" , indeed, it's the following of the first one.
Hope I gave enough informations and wasn't too vaguely. I can edit my code if something missing.
Thanks for your help.
Greetings.
解决方案 Your Stockage
class has the member result
, but it is not a public
property like it should be:
public static ObservableCollection<Stockage> result =
new ObservableCollection<Stockage>();
This is a public static
variable, not a property. It should be defined like this:
private ObservableCollection<Stockage> result = new ObservableCollection<Stockage>();
public ObservableCollection<Stockage> Result
{
get { return result ; }
set { result = value; OnPropertyChanged("Result"); }
}
Note how it calls the OnPropertyChanged
method to report of property changes... all of your properties should do that... that is how you implement the INotifyPropertyChange
interface.
这篇关于绑定路径= myObservableCollection属性预期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!