繁体   English   中英

将Listview绑定到ObservableCollection

[英]Bind Listview to ObservableCollection

我试图将一个listview绑定到一个ObservableCollection。

我查看了堆栈上的几个主题,但找不到我在做什么错:

我的XAML看起来像这样(对于GridViewColumn,我尝试了wih Path =,但没有尝试,因为我看到了两者):

<ListView x:Name="ListView1"  ItemsSource="{Binding listeAff}"  Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="4" MouseDoubleClick="ListView_MouseDoubleClick" GridViewColumnHeader.Click="GridViewColumnHeaderClickedHandler" >
            <ListView.ContextMenu>
                <ContextMenu x:Name="Context1">
                    <MenuItem Header="{x:Static p:Resources.ContextSupprimer}" Click="Supprimer_Element"/>
                    <MenuItem x:Name="MenuBarNesting" Header="{x:Static p:Resources.ContextMiseEnBarre}" Click="Open_MiseEnBarre"/>
                    <MenuItem x:Name="MenuExportDSTV1" Header="{x:Static  p:Resources.ContextExport}" Click="Export_DSTV"/>
                    <MenuItem x:Name="AjouterAffaire" Header="{x:Static  p:Resources.AjouterAffaire}" Click="AjoutAffaire"/>
                    <MenuItem x:Name="ModifyAffaire" Header="{x:Static  p:Resources.Edit}" Click="ModifierAffaire"/>
                </ContextMenu>
            </ListView.ContextMenu>
            <ListView.View>

                <GridView AllowsColumnReorder="true" x:Name="GridView1">
                    <GridViewColumn DisplayMemberBinding="{Binding Path=ID}" Header="ID" />
                    <GridViewColumn DisplayMemberBinding= "{Binding Nom}" Header="{x:Static p:Resources.Nom}"/>
                    <GridViewColumn DisplayMemberBinding="{Binding Code}" Header="{x:Static p:Resources.Code}"/>
                    <GridViewColumn DisplayMemberBinding="{Binding Comm}" Header="{x:Static p:Resources.Commentaire}"/>

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

那么后面的代码是这样的:

public ObservableCollection<Affaire> listeAff { get; set; }
        public MainWindow()
        {
            Thread.CurrentThread.CurrentUICulture = new CultureInfo(Properties.Settings.Default.Langue);
            InitializeComponent();
            Initialisation();
            listeAff = new ObservableCollection<Affaire>();
            DBConnect DataBase = new DBConnect();
            string requete = "SELECT * FROM affaire ORDER BY ID";
            List<Affaire> liste = DataBase.Select_affaire(requete);
            foreach(Affaire aff in liste)
            {
                listeAff.Add(aff);
            }
            DataContext = this;

在那部分上,我的ListView正确显示,但是当我想删除(例如)列表中的某些对象时,listview不会更新:

foreach (Affaire aff in ListView1.SelectedItems)
                    {
                        listeAff.Remove(aff);
                    }

我错过了什么?

您必须执行以下操作以获得更新的值

public class ChangeViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged=delegate {};

    private void NotifyPropertyChanged([CallerMemberName] String 
                                                  propertyName = "")
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new 
                 PropertyChangedEventArgs(propertyName));
        }
    }

    ObservableCollection<Affaire> affaireListObservable;
    public ObservableCollection<Affaire> AffaireListObservable {
      get { return affaireListObservable; }
      set {
        affaireListObservable= value;
        if(PropertyChanged!=null) {
          NotifyPropertyChanged();
        }
      }
    }    
    public ChangeViewModel()
    {
        AffaireListObservable  = new ObservableCollection<Affaire>();
    }
    public void RemoveFromList()
    {
         foreach (Affaire aff in ListView1.SelectedItems)
         {
              AffaireListObservable.Remove(aff);
         }
    }
}

仔细检查您的绑定,在将DataContext分配给widnow时,您可以在树中直到窗口使用它,然后将listview绑定到window的DataContext

<ListView ItemsSource="{Binding Path=DataContext.listeAff ,
        RelativeSource={RelativeSource 
   Mode=FindAncestor,AncestorType=Window}}" 
  />

一旦您从集合中删除或删除某些内容,就必须通知UI,以便UI相应地进行更新。 您要做的是在类中使用INotifyPropertyChanged事件。 您可以在这里了解所有想要的信息

学习愉快,编码愉快!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM