C# WPF-无法使用MVVM更新ListView

C# WPF-无法使用MVVM更新ListView,c#,wpf,mvvm,C#,Wpf,Mvvm,我有一个用户控件,在列表视图中有不同的按钮。如果我实例化我的可观察列表并添加一些我可以更新的项目。但是如果我在按下按钮后实例化它,它不会更新GUI class ModelViewA { private ObservableCollection<ObjectA> myList; public ObservableCollection<ObjectA> MyItems {get {return myList;} set {myList = value;}} privat

我有一个用户控件,在列表视图中有不同的按钮。如果我实例化我的可观察列表并添加一些我可以更新的项目。但是如果我在按下按钮后实例化它,它不会更新GUI

class ModelViewA {
 private ObservableCollection<ObjectA> myList;
 public ObservableCollection<ObjectA> MyItems {get {return myList;} set {myList = value;}}
 private void OnConfigCommand(int numbers)
 {   
   myList = new ObservableCollection<ObjectA>();
   for(int i = 0; i <  numbers; i++)
   {
     myList.Add(new Object() { Name="Name" }); 
   }
  }

}
    class ObjectA : INotifyPropertyChanged {
    private string name;
    public string Name
    {
      get { return name; }
      set
         {
           if (name != value)
           {
            name = value;
            RaisePropertyChanged("Name");
            }
           }
         }
      public event PropertyChangedEventHandler PropertyChanged;

      private void RaisePropertyChanged(string property)
            {
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs(property));
                }
            }
    }

<ListView x:Name="m_List" ItemsSource="{Binding Path=MyItems,UpdateSourceTrigger=PropertyChanged}" DockPanel.Dock="Top" BorderThickness="2" BorderBrush="DimGray" Margin="0,5,0,0" Height="250">
          <ListView.View>
            <GridView AllowsColumnReorder="False" >
              <GridViewColumn  Header="Name" Width="60" DisplayMemberBinding="{Binding Path= Name}"/>
              <GridViewColumn Width="80" DisplayMemberBinding="{Binding ButtonName}" >
                <GridViewColumn.Header>
                  <Button Width="76" Height="110" Content="ButtonName" Tag="0" ToolTip="Click here to import data from *.ini file."  Command="{Binding OnConfigCommand}" CommandParameter="0"/>
                </GridViewColumn.Header>
              </GridViewColumn>
             </GridView>
          </ListView.View>
  </ListView>
类模型视图a{
私人可观察收集myList;
公共ObservableCollection MyItems{get{return myList;}set{myList=value;}}
私有void OnConfigCommand(整数)
{   
myList=新的ObservableCollection();
对于(int i=0;i
对ModelViewA类也使用INotifyPropertyChanged

class ModelViewA : INotifyPropertyChanged
并定义事件,就像对ObjA类所做的那样

然后对listview的itemsource执行以下操作:

public ObservableCollection<ObjectA> MyItems 
  {
     get {return myList;} 
     set {
           myList = value;
           RaisePropertyChanged("MyItems");
         }
  }
公共可观测集合MyItems
{
获取{return myList;}
设置{
myList=值;
RaisePropertyChanged(“MyItems”);
}
}

问题是您通知UI Mylist中的项目发生了更改,但没有通知MyItems正在更改

如果没有可靠地再现问题的好答案,就不可能给出好答案。也就是说,如果“在之后实例化它”,您的意思是在设置绑定之后设置
MyItems
属性,那么我不希望绑定值更新,因为您的
ModelViewA
类没有实现
INotifyPropertyChanged
是的,我知道这很难,但我无法发布整个代码。是的,我就是这个意思。我也这样试过,但也没有成功。但是谢谢你的帮助。最好在绑定之前更改GUI并设置我的项目。我怀疑ListView上的UpdateSourceTrigger是问题的一部分。你在那里尝试过不同的设置吗?(除了Peter所说的之外)您需要让gui知道您的收藏已更改。在MyItems属性“我不能发布整个代码”的setter中引发属性更改事件——没有人希望您这样做。请阅读,以便您了解需要什么样的代码示例。另请参阅,了解如何以清晰、可回答的方式提出问题的建议,以及该页面底部链接的文章,了解有关如何为问题提供良好代码示例的更多信息。是,混淆的可能是,如果可观察集合的内容发生更改,当然不需要引发属性更改事件。然而,这里实际的可观察集合本身正在被替换。我个人认为,为了避免这种混淆,您永远不应该允许在实例化后替换一个可观察的集合-为此集合创建一个支持的只读字段,并让您的setter只执行一个清除并逐个添加给定项。也许重新清除和添加是一种更好的做法,但我几乎看不出有什么不同。我总是像我在回答中解释的那样处理我的收藏。然而,独立于如何处理SET,OP需要实现InTyfyPrimyType。您的答案是完全有效的,并且我已经给了它一个赞成票,我只是想为OP添加一些额外的东西来考虑。