无法将列表/网格绑定到集合

时间:2009-10-16 16:55:39

标签: c# wpf data-binding collections

我已经设置了一个网格并将其绑定到一个集合。我可以通过网格编辑集合中的项目,并将更改传播到集合中。并且,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>

3 个答案:

答案 0 :(得分:2)

您的[view]模型类是否实现INotifyPropertyChanged并在使用属性集访问器时触发事件?

答案 1 :(得分:2)

您需要确保您要数据绑定的集合本身是一个可观察的集合(实现INotifyCollectionChanged接口的类)。您也许可以选择滚动自己的实现INotifyCollectionChanged的类,但这是ObservableCollection存在的唯一原因,因此它可以节省您一些时间。

如何做msdn article

答案 2 :(得分:1)

您需要确保您的收藏品实施INotifyPropertyChanged

如果您正在以编程方式(正确)更改每个项目,那么ListView / GridView将保持最新状态。

如果您以编程方式或在其他屏幕中修改收藏项目,则此功能将起作用。