2011-09-10 4 views
2

J'ai commencé à jouer avec le contrôle wpf listview. J'ai créé un bouton "ajouter" et un bouton "modifier". Le bouton "Ajouter" fonctionne comme prévu - chaque fois que j'ajoute un nouvel élément à la liste, il est affiché. Mon problème est avec le bouton "modifier" - quelle est la bonne façon d'informer le contrôle listView qu'un élément a été changé? (Cela fonctionne dans le code ci-joint, je voulais juste savoir s'il y a une meilleure façon)Comment rafraîchir un contrôle listview après avoir édité un élément?

Ceci est mon code:

Xaml:

<Window x:Class="WpfApplication5.MainWindow" Name="This" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525" 
    > 
<Grid> 
    <ListView Name="Mylist" 
       ItemsSource= "{Binding ElementName=This, Path=People}" 
       SelectionMode="Single" 
       > 
     <ListView.View> 
       <GridView AllowsColumnReorder="false"> 
        <GridViewColumn 
          Header="Name" 
          Width="Auto" 
          DisplayMemberBinding="{Binding Path=Name}" /> 
        <GridViewColumn 
          Header="Id" 
          Width="Auto" 
          DisplayMemberBinding="{Binding Path=Id}" /> 
       </GridView> 
      </ListView.View> 
    </ListView> 
    <StackPanel Orientation="Horizontal" Height="45" Margin="190,133,197,133"> 
     <Button 
        Content="Add" 
        Click="AddButton_Click" 
        /> 
     <Button 
        Content="Edit" 
        Click="EditButton_Click" 
        /> 
    </StackPanel> 
</Grid> 
</Window> 

code Derrière:

namespace WpfApplication5 
{ 
public class PersonalDetails 
{ 
    public string Name {get; set;} 
    public string Id {get; set;} 
} 

public partial class MainWindow : Window 
{ 
    private ObservableCollection<PersonalDetails> people = new ObservableCollection<PersonalDetails>(); 
    public ObservableCollection<PersonalDetails> People 
    { 
     get { return this.people; } 
    } 

    public MainWindow() 
    { 
     PersonalDetails p1 = new PersonalDetails(); 
     p1.Name = "Jeff"; 
     p1.Id = "111"; 
     people.Add(p1); 
     InitializeComponent(); 
    } 

    private void AddButton_Click(object sender, System.Windows.RoutedEventArgs e) 
    { 
     PersonalDetails p2 = new PersonalDetails(); 
     p2.Name = "Tom"; 
     p2.Id = "222"; 
     people.Add(p2); 
    } 

    private void EditButton_Click(object sender, System.Windows.RoutedEventArgs e) 
    { 
     PersonalDetails pItem = (PersonalDetails)Mylist.SelectedItem; 
     if (pItem == null) 
     { 
      return; 
     } 
     pItem.Name = "Dan"; 
     Mylist.Items.Refresh(); 

    } 

} 
} 

Merci, Li

Répondre

5

Votre classe PersonalDetails doit implémenter le INotifyPropertyChanged interface.

Ensuite, lorsque la propriété Name change et que vous déclenchez l'événement PropertyChanged, l'infrastructure de liaison WPF répond en actualisant la présentation.

Questions connexes