2015-03-28 3 views
-1

My ListBox не реагирует на мой ObservableCollection.Наблюдаемая коллекция не реагирует на ее коллекцию

Это ListBox, о котором я говорю.

<ListBox x:Name="CreateFieldsList" 
     HorizontalAlignment="Left" 
     Height="218" 
     VerticalAlignment="Top" 
     Width="244" 
     Margin="0,86,0,0" 
     BorderBrush="#FFB9B9B9"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Grid Margin="4" 
        Width="215" 
        Height="32.96" 
        Background="White"> 
       <TextBlock Text="{Binding Name}" 
          FontWeight="Normal" 
          FontSize="18.667" 
          Padding="8,3,0,0" /> 
      </Grid> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

В моей MainWindow, я готовлю привязки данных, как этот

private ObservableCollection<FieldListItem> _fieldItems; 

public MainWindow() 
{ 
    InitializeComponent(); 
    _fieldItems = new ObservableCollection<FieldListItem>(); 
    CreateFieldsList.ItemSource = _fieldItems; 
} 

А FieldListItem следит за

public class FieldListItem : ViewItem 
{ 
    private Field _field; 
    public string Name 
    { 
     get { return _field.Name; } 
    } 

    public string Value 
    { 
     get { return _field.Value; } 
    } 

    public FieldListItem(Field f) 
    { 
     _field = f;   
    } 
} 

и, наконец, ViewItem

public class ViewItem : INotifyPropertyChanged 
{ 
    private event PropertyChangedEventHandler PropertyChanged; 

    protected void RaisePropertyChanged([CallerMemberName] string caller = "") 
    { 
     if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(caller)); 
    } 

    //The interface forces me to implement this. Why? 
    event PropertyChangedEventHandler INotifyPropertyChanged.PropertyChanged 
    { 
     add { } 
     remove { } 
    } 
} 

Я не» я знаю, почему это не за работой. Не могли бы вы помочь?

+0

Вы не инициализирован '_fieldItems' перед присвоением значения для ItemSource. –

+0

Извините, я случайно удалил эту строку. Я инициализировал список. Все еще нет решения. – Saphire

+0

Но этот список пуст. а также Укажите, что не работает? Каково ваше ожидаемое поведение или результат и как ваша программа в настоящее время ведет себя. –

ответ

0

Интерфейс INotifyPropertyChanged требует, чтобы вы реализовали событие. Реализация вашего события не работает, потому что регистрацию и разделение игнорируются, потому что блоки добавления и удаления пустые.

Реализовать событие без добавления и удаления:

public class ViewItem : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    protected void RaisePropertyChanged([CallerMemberName] string caller = "") 
    { 
     var copy = PropertyChanged; 
     if (copy != null) 
      copy(this, new PropertyChangedEventArgs(caller)); 
    } 
} 
+0

Когда я это делаю, метод 'RaisePropertyChanged' говорит, что' PropertyChanged может появляться только слева от + = или - = 'и' свойство события должно содержать как добавление, так и удаление аксессуаров' – Saphire

+0

Событие должно быть общедоступным, изменить его .. –

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