2014-09-23 2 views
0

У меня есть класс с именем Stockage, который унаследует от INotifyPropertyChanged. этого класс установить некоторые строки, а затем создать ObservableCollection из ObservableCollections. Это ObservableCollection отправить значение в несколько строк поставил передне удается разрешить свойство «myObservableCollection» в контексте данных типа «» namespace.class»

как это:.

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)); 
      } 

    } 

Я хочу отправить ObservableCollection ObservableCollections (result) в 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.

Проблема, на ItemsSource="{Binding Path=result}" моего DataGrid, результат «не удается разрешить свойство в контексте данных типа«WpfApplication3.Stockage` (мой namespace.MyClassContainingMyCollectionResult)

Я предполагаю, что я называю что-то не так, Или я делаю что-то запретное.Я пытался дать как можно больше информации о том, что результат, где я это называю, как. Надеюсь, я дал достаточно информации, и я не был слишком смутно. Я могу изменить свой код, если что-то не хватает.

Спасибо за вашу помощь и поздравляю, что прочитал этот текст o конец.

Приветствия.

EDIT1 The OnPropertyChanged прищурен, кроме того, я изменил декларацию результата.

ответ

0

По вашему мнению, вы установили Window.DataContext к экземпляру вашего Stockage класса:

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

Затем вы пытаетесь связать данные с не публичной переменной из этого класса, result, которые вы не можете сделать , Вместо этого вы должны сделать эту переменную общедоступным, с которой вы можете привязать данные.

Кроме того, не отображается, что вы на самом деле вызываете свой метод OnPropertyChanged, а это значит, что вы не внедрили интерфейс INotifyPropertyChanged правильно.

+0

Для первой вещи, я beclared результата так: 'открытые статические ObservableCollection результата = новый ObservableCollection ()' непосредственно перед 'публичного статического ObservableCollection Load' Кроме того, у меня есть' общественного мероприятие PropertyChangedEventHandler PropertyChanged ; частная пустота OnPropertyChanged (строковое свойство) { если (PropertyChanged! = NULL) { PropertyChanged (это новые PropertyChangedEventArgs (недвижимость)); } } 'после результата возврата, я редактирую свой код, я думаю, что забыл написать его. – Flo

+0

Хорошо, теперь у меня есть еще одна ошибка в 'ItemsSource =" {Binding Path = result} "' Свойство, ожидаемое на 'result' Я должен сделать' result.Something'? Я могу создать другую тему, если вы предпочитаете эту новую проблему. – Flo

+0

* Я могу создать еще одну тему, если вы предпочитаете эту новую проблему * ... возможно, это лучше, так как этот вопрос становится все более запутанным, когда вы изменили свой код и сделали эти два ответа кажущимися странными. В новый вопрос укажите * полную * информацию об ошибке. – Sheridan

0

Ваша проблема заключается в том, что result - это локальная переменная в методе Load, а не свойство, к которому вы можете привязываться.

Смежные вопросы