2011-09-10 9 views
2

私はwpf listviewコントロールで遊び始めました。私は "追加"ボタンと "編集"ボタンを作成しました。 「追加」ボタンは期待通りに機能します。リストに新しい項目を追加するたびに、表示されます。 私の問題は「編集」ボタンにあります。アイテムが変更されたことをlistViewコントロールに通知する正しい方法は何ですか? (それは私がちょうど良い方法があるかどうかを知りたいと思った、付属のコードで動作します)アイテムの編集後にリストビューコントロールを更新するにはどうすればよいですか?

これは私のコードです:

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> 

コード:

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(); 

    } 

} 
} 

ありがとう、 Li

答えて

5

PersonalDetailsクラスは、 INotifyPropertyChangedインターフェイス。

Nameプロパティが変更され、PropertyChangedイベントが発生すると、WPFバインディングインフラストラクチャはプレゼンテーションを更新して応答します。

関連する問題