2012-12-27 4 views
1

두 개의 List<ColumnClass>이 있습니다. 하나는 왼쪽 목록보기 용이고 다른 하나는 오른쪽 목록보기 용입니다. 이 목록보기는 팝업 상자에 있습니다. Listview의 List를 수정하고 다시 Listview의 ItemsSource에 할당하려고합니다. 그러나 이것은 UI에 즉시 반영되지 않습니다. 팝업을 닫고 다시 열면 변경 사항이 반영됩니다. 내가 뭘 놓치고 있니? 항목이 제거 될 때마다 당신이 당신 ColumnClass 구현이 INotifyPropertyChanged이 때이 속성 변경 UI를 업데이트 할 수 있는지 확인하여 ColumnClass 속성을 modifing에있는 경우ListView에서 추가 제거 중 UI에 반영되지 않음

답변

2

당신은 ObservableCollection<T>List<T>이 ObservableCollections 당신의 ListView 업데이트됩니다 교체해야합니다.

예 :

코드 :

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     MyColumns.Add(new ColumnClass { Name = "Column1" }); 
     MyColumns.Add(new ColumnClass { Name = "Column2" }); 
     MyColumns.Add(new ColumnClass { Name = "Column3" }); 
    } 

    private ObservableCollection<ColumnClass> _myColumns = new ObservableCollection<ColumnClass>(); 
    public ObservableCollection<ColumnClass> MyColumns 
    { 
     get { return _myColumns; } 
     set { _myColumns = value; } 
    } 
} 

XAML :

<Window x:Class="WpfApplication8.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="WpfApplication8" Height="368" Width="486" Name="UI" > 
    <Grid> 
     <ListView ItemsSource="{Binding ElementName=UI, Path=MyColumns}" DisplayMemberPath="Name" /> 
    </Grid> 
</Window> 

모델 :

public class ColumnClass : INotifyPropertyChanged 
{ 
    private string _name; 
    public string Name 
    { 
     get { return _name; } 
     set { _name = value; NotifyPropertyChanged("Name"); } 
    } 



    public event PropertyChangedEventHandler PropertyChanged; 
    /// <summary> 
    /// Notifies the property changed. 
    /// </summary> 
    /// <param name="property">The info.</param> 
    public void NotifyPropertyChanged(string property) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(property)); 
     } 
    } 
} 
관련 문제