2011-09-10 3 views
2

나는 wpf listview 컨트롤을 가지고 놀기 시작했다. 나는 "추가"버튼과 "편집"버튼을 만들었습니다. "추가"버튼이 예상대로 작동합니다. 목록에 새 항목을 추가 할 때마다 표시됩니다. "편집"버튼에 문제가 있습니다 - 항목이 변경되었다는 것을 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 바인딩 인프라가 프레젠테이션을 새로 고침으로써 응답합니다.

관련 문제