ListView项目不显示

樱桃

我有一个相当简单ListViewGridView风格。单元绑定到ObservableCollection元素的某些属性我不知道为什么塞伊不显示。我正在考虑INotifyPropertyChanged在collection包含的元素类中实现,但是一旦构造了元素并将其添加到collection中,它就永远不会改变,因此它应该可以正常工作。

C#:

public ObservableCollection<SceneElement> SceneObjects { get; set; }
...
SceneObjects.Add(new Camera());
SceneObjects.Add(new Cuboid(20, 30, 40));

Camera并且Cuboid都继承自SceneObjectSceneObject<- Figure<-CuboidSceneObject<- Camera

XAML:

<ListView Grid.Column="2" Margin="5"
                      ItemsSource="{Binding }"
                      DataContext="{Binding SceneObjects}"
                      ScrollViewer.CanContentScroll="True">
                <ListView.Resources>
                    <GridView x:Key="StyleOne">
                        <GridViewColumn Header="Type" >
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <TextBlock Text="1" />
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
                        <GridViewColumn Header="Position" >
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <StackPanel Orientation="Horizontal">
                                        <TextBlock Text="X: " />
                                        <TextBlock Text="{Binding Position.X, RelativeSource={RelativeSource Mode=FindAncestor}}" />
                                        <TextBlock Text=" Y: " />
                                        <TextBlock Text="{Binding Position.Y}" />
                                        <TextBlock Text=" Z: " />
                                        <TextBlock Text="{Binding Position.Z}" />
                                    </StackPanel>
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
                    </GridView>
                </ListView.Resources>
                <ListView.Style>
                    <Style TargetType="ListView">
                        <Setter Property="View" Value="{StaticResource StyleOne}" />
                    </Style>
                </ListView.Style>
            </ListView>

Position属性是在抽象SceneElement类中定义的PositionXY并且Z是特性为好。

编辑

这样就解决了问题:

private ObservableCollection<SceneElement> sceneObjects;
    public ObservableCollection<SceneElement> SceneObjects
    {
        get
        {
            return sceneObjects;
        }
        set
        {
            sceneObjects = value;
            NotifyPropertyChanged("SceneObjects");
        }
    }

谁能解释为什么这是必要的?ObservableCollection到目前为止,我已经使用了严重的时间,并且总是在没有通知的情况下工作。

XAMlMAX

您的应用程序未显示有关集合的信息的原因是因为UI不知道任何更改。
如果ObservableCollection不能保证在使用之前未初始化所述集合,则使用并不能保证会显示结果。由于它是ViewModel上的普通属性,因此需要通知是否ObservableCollection已更改了该对象(在这种情况下),但从某种意义上来说,不是该集合中的项。
这是由于没有引发PropertyChanged事件的事实SceneObjects,这对于使用的WPF应用程序至关重要Bidning

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章