我将字典绑定到WPF中的ListView。
<ListView x:Name="listView" HorizontalAlignment="Left" Height="100" Margin="30,324,0,0" VerticalAlignment="Top" Width="270" ItemsSource="{Binding ArchiveDataDB}">
<ListView.View>
<GridView>
<GridViewColumn Header="Archive Name"
DisplayMemberBinding="{Binding Key}" />
<GridViewColumn Header="Data DB Amount"
DisplayMemberBinding="{Binding Value}" />
</GridView>
</ListView.View>
</ListView>
这是我的字典:
public Dictionary<string, int> ArchiveDataDB
{
get
{
if(_archiveDataDB == null)
{
_archiveDataDB = new Dictionary<string, int>();
_archiveDataDB.Add("Master Data", 0);
}
return _archiveDataDB;
}
set
{
_archiveDataDB = value;
}
}
我还有一个按钮,它应该从2个文本框中获取一个字符串和一个int,并将这两个信息添加到列表中
public void AddEntry(object args)
{
ArchiveDataDB.Add(ArchiveName, DataDBAmount);
OnPropertyChanged("ArchiveDataDB");
}
OnPropertyChanged方法从INotifyPropertyChanged接口实现。
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
出于测试目的,我在AddEntry方法中添加了MessageBox.Show
并显示了所有的声明。我100%确定新的键和值被添加到字典中,但是ListView没有得到更新。
感谢您的帮助
最高
答案 0 :(得分:1)
快速解决此问题,您可以使用此功能:
替换
return _archiveDataDB;
带
return _archiveDataDB.ToDictionary(x=>x.Key, y=>y.Value);
和这一行
ArchiveDataDB.Add(ArchiveName, DataDBAmount);
withi this line
_archiveDataDB.Add(ArchiveName, DataDBAmount);
当ListView获取字典的新实例时,它会更新布局。
但为了使它正确,你应该使用ObservableDictionary的一些实现或使用其他可观察的集合。
例如从这里开始:
我希望它有所帮助。