我已经设置了一个网格并将其绑定到一个集合。我可以通过网格编辑集合中的项目,并将更改传播到集合中。并且,GUI在ItemSource设置时显示集合中的所有内容。但是,我正在以编程方式更改集合中的一些项目(在设置ItemSource之后),这些更改不会反映在网格/ GUI中。还有什么我需要做的才能让它刷新。仅供参考,对于我要编辑的字段(MoveToResource,ResourceKey和资源类型),我已将模式设置为TwoWay。下面是我的网格。
<ListView Name="lstXAMLStrings" Margin="5" Grid.Row="1">
<ListView.View>
<GridView>
<GridView.Columns>
<GridViewColumn Header="Extract?">
<GridViewColumn.CellTemplate>
<DataTemplate>
<CheckBox Content="" IsChecked="{Binding Path=MoveToResource, Mode=TwoWay}" ></CheckBox>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Text">
<GridViewColumn.CellTemplate>
<DataTemplate>
<local:RichTextBlock RichText="{Binding Path=FormattedMatchedLines}" TextWrapping="Wrap" Width="650"></local:RichTextBlock>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Key Name">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=ResourceKey, Mode=TwoWay}" Width="150"></TextBox>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Resource Type">
<GridViewColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Source={StaticResource odp}}" SelectedItem="{Binding Path=Resource, Mode=TwoWay}"></ComboBox>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView.Columns>
</GridView>
</ListView.View>
</ListView>
答案 0 :(得分:2)
您的[view]模型类是否实现INotifyPropertyChanged并在使用属性集访问器时触发事件?
答案 1 :(得分:2)
您需要确保您要数据绑定的集合本身是一个可观察的集合(实现INotifyCollectionChanged接口的类)。您也许可以选择滚动自己的实现INotifyCollectionChanged的类,但这是ObservableCollection存在的唯一原因,因此它可以节省您一些时间。
如何做msdn article。
答案 2 :(得分:1)
您需要确保您的收藏品实施INotifyPropertyChanged。
如果您正在以编程方式(正确)更改每个项目,那么ListView / GridView将保持最新状态。
如果您以编程方式或在其他屏幕中修改收藏项目,则此功能将起作用。