[英]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.