Как обновить представление списка из наблюдаемой коллекции модели с привязкой к моделям до источника данных
У меня есть представление списка, которое дополнительно содержит текстовое поле в табличке данных, имеющее столбцы Имя, Адрес, Страна. Теперь источник данных этого списка связан с наблюдаемой коллекцией модели в моем классе 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);
}
}
}