WPF ListView不会更新绑定字典

时间:2016-09-07 12:53:34

标签: c# wpf listview dictionary mvvm

我将字典绑定到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没有得到更新。

感谢您的帮助

最高

1 个答案:

答案 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的一些实现或使用其他可观察的集合。

例如从这里开始:

.NET ObservableDictionary

我希望它有所帮助。