集合更改时刷新wpf列表框

时间:2018-04-28 20:45:16

标签: c# wpf listbox

我正在使用带有字符串集合的设置。

我使用以下绑定填充列表框:

segment

当我向集合中添加新字符串时,列表框中的项目将不会更新。

我错过了什么?

1 个答案:

答案 0 :(得分:0)

如果您没有提供显示如何创建StaticResource的代码,我将假设您要直接从xaml绑定设置。

从XAML绑定Settings.Default

在第一个实例中,添加指向设置类类别的命名空间的XML命名空间:

xmlns:properties="clr-namespace:WpfSettings.Properties"

然后,您可以按如下方式绑定您的收藏集:

ItemsSource="{Binding Source={x:Static properties:Settings.Default}, Path=Collection}"

由于您直接绑定到直接在设置中声明的集合,因此如果WPF未实现INotifyCollectionChanged,则不会知道集合更新。要解决此问题,您可以在设置中创建ObservableCollection

在设置中创建ObservableCollection

Open settings in XML editor并添加新设置,如下所示:

<Setting Name="Collection" Type="System.Collections.ObjectModel.ObservableCollection&lt;System.String&gt;" Scope="User">
  <Value Profile="(Default)" />
</Setting>

然后在设置编辑器(source)中添加默认值:

<?xml version="1.0" encoding="utf-16"?>
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:xsd="http://www.w3.org/2001/XMLSchema" />

最后,它可能看起来像这样:

<Setting Name="Collection" Type="System.Collections.ObjectModel.ObservableCollection&lt;System.String&gt;" Scope="User">
  <Value Profile="(Default)">&lt;?xml version="1.0" encoding="utf-16"?&gt;
&lt;ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema" /&gt;</Value>
</Setting>

每当您向Collection设置添加项目时,ListBox也会更新。