如何将listview从viewmodel绑定模型observable集合更新为itemsource

时间:2017-11-30 03:38:08

标签: wpf listview mvvm data-binding itemsource

我有一个列表视图,其中还包含datatemplate中的文本框,其中包含列Name,Address,Country。 现在,这个listview的Itemsource绑定到我的viewmodel类中的模型的可观察集合。

我正在通过在VM中的某些条件下使名称和地址为空来更新ObjModel(类型为ObservableCollection<Model>),并且我可以在viewmodel类的ObjModel对象中看到name的值为empty。 但是这些更改没有反映在UI(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>

查看模型包含:

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

在某些条件下我做的一些

ObjModel[0].Name= string.Empty; 

它不会在ListView中更新,因为它的itemsource被绑定到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 个答案:

答案 0 :(得分:0)

在模型中,您需要在设置属性值时触发PropertyChanged。例如:

public string Name
  {
    get { return this.name; }
    set 
    {
      if(this.name != value)
      {
        this.name = value;
        OnPropertyChanged(Name);
      }
    }
  }