Как обновить представление списка из наблюдаемой коллекции модели с привязкой к моделям до источника данных

У меня есть представление списка, которое дополнительно содержит текстовое поле в табличке данных, имеющее столбцы Имя, Адрес, Страна. Теперь источник данных этого списка связан с наблюдаемой коллекцией модели в моем классе viewmodel.

Я обновляю ObjModel (типаObservableCollection<Model>), сделав имя и адрес пустыми, при некоторых условиях в ВМ, и я могу видеть значения имени, пустые в моем объекте ObjModel в классе viewmodel. Но эти изменения не отражаются в пользовательском интерфейсе (ListView), я что-то упустил, Как обновить просмотр списка.

Мой взгляд выглядит примерно так:

 <DataTemplate x:Key="EquipmentItemTemplate">
                <Grid
                    x:Name="ListItem"
                    Height="40"
                    ZIndex="1">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="200" />
                        <ColumnDefinition Width="250" />
                        <ColumnDefinition Width="250" />
                    </Grid.ColumnDefinitions>
                    <TextBlock Grid.Column="0" Text="{Binding Path=Name}" />
                    <TextBlock Grid.Column="1" Text="{Binding Path=Address}" />
                    <TextBlock Grid.Column="2" Text="{Binding Path=Country}" />
                </Grid>
            </DataTemplate>
 <ListView x:Name="MaintenanceElements" 
                 ItemContainerStyle="{StaticResource SequenceListItemStyle}"
                 ItemTemplate="{StaticResource EquipmentItemTemplate}"
                ItemsSource="{Binding EquipmentMaintenanceEntityItemsCollection}"
                SelectedItem="{Binding SelectedMaintenanceElement}">
                    <ListView.View>
                        <GridView AllowsColumnReorder="False">
                            <GridViewColumn
                                    Width="200"
                                    local:GridViewSort.PropertyName="Name"
                                    Header="Name" />
                            <GridViewColumn
                                    Width="250"
                                    local:GridViewSort.PropertyName="Address"
                                    Header="Address" />
                            <GridViewColumn
                                    Width="250"
                                    local:GridViewSort.PropertyName="Country"
                                    Header="Country" />

                        </GridView>
                    </ListView.View>                   
                </ListView>

Модель View содержит:

 public ObservableCollection<Model> ObjModel { get; set; }

Где-то на каком-то условии я

ObjModel[0].Name= string.Empty; 

Он не обновляется в ListView, потому что его источник данных привязан к наблюдаемой коллекции объекта Model. Как обновить ListView отсюда?

Моя модель:

public class EquipmentMaintenanceModel : ChangeTracker, INotifyPropertyChanged
    {
      private string name;
      private string address;
      private string country;

       public string Name
        {
            get { return this.name; }
            set { this.name = value; }
        }

       public string Address
        {
            get { return this.address; }
            set { this.address = value; }
        }
       public string Country
        {
            get { return this.country; }
            set { this.country = value; }
        }
        private void OnPropertyChanged(string propertyName)
        {
            if (this.PropertyChanged != null)
            {
                this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }

1 ответ

Решение

В вашей модели вам нужно запустить PropertyChanged, когда вы устанавливаете значение свойства. например:

public string Name
  {
    get { return this.name; }
    set 
    {
      if(this.name != value)
      {
        this.name = value;
        OnPropertyChanged(Name);
      }
    }
  }
Другие вопросы по тегам