私は2つ持っていList<ColumnClass>
ます。1 つは左側のリストビュー用、もう 1 つは右側のリストビュー用です。これらのリストビューはポップアップ ボックスにあります。両方のリストビューのリストを変更し、それをリストビューの ItemsSource に再度割り当てています。しかし、これはすぐに UI に反映されません。ポップアップを閉じて再度開くと、変更が反映されます。私は何が欠けていますか?
質問する
73 次
2 に答える
2
List<T>
をに置き換える必要がありObservableCollection<T>
ます。ObservableCollections は、アイテムが削除されるたびに ListView を更新します。プロパティを変更するだけの場合は、プロパティが変更されたときに UI を更新できるように実装ColumnClass
していることを確認してください。ColumnClass
INotifyPropertyChanged
例:
コード:
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));
}
}
}
于 2012-12-27T06:24:45.577 に答える
0
またはに変更List<T>
する必要があります。ObservableCollection<T>
BindingList<T>
理由、リストは実装されていませんINotifyPropertyChanged
。
于 2012-12-27T06:28:54.693 に答える