GridView数据绑定问题

时间:2013-12-09 19:33:20

标签: c# xaml data-binding windows-8

我在GridView数据绑定方面遇到了麻烦。

我在ViewModelGV.cs文件中创建了一个View Model。

class ViewModelGV
{

    public ObservableCollection<Person> Persons{ get; set; }          

    public ViewModelGV()
    {
        Persons = new ObservableCollection<Person>();
        Person person1 = new Person();
        person1.Name = "John";
        Persons.Add(person1);

        Person person2 = new Person();
        person2.Name = "Jack";
        Persons.Add(person2);

        Person person3 = new Person();
        person3.Name = "Stephen";
        Persons.Add(person3);
    }
}

另一类具有简单Name属性的人。

class Person
{
    private String _Name;

    public String Name
    {
        get { return _Name; }
        set { _Name = value; }
    } 
}

然后在我的XAML文件中,我将DataContext指向我的ViewModelGV(我添加了一些问号来标记代码中的重要点)。

<Page.DataContext>
    <ViewModels:ViewModelGV/>
</Page.DataContext>

并添加了CollectionViewSource

<Page.Resources>
    <CollectionViewSource x:Name="Src" IsSourceGrouped="False" ItemsPath="?" Source="{Binding Persons}" />
</Page.Resources>

我不知道如何指向特定项名称值,它可能与ItemsPath属性有关。

然后在我的GridView中,我想在下面创建一个带有Rectangle和TextBlock的StackPanel。

<Grid x:Name="LayoutGrid" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <GridView ItemsSource="{Binding Source={StaticResource Src}}">
        <GridView.GroupStyle>
            <GroupStyle>
                <GroupStyle.Panel>
                    <ItemsPanelTemplate>
                        <StackPanel>
                            <Rectangle Fill="Red" Width="100" Height="100" />
                            <TextBlock Text="{Binding ? Name ? }" FontSize="40" />
                        </StackPanel>
                    </ItemsPanelTemplate>
                </GroupStyle.Panel>
            </GroupStyle>
        </GridView.GroupStyle>
    </GridView>   
    <TextBlock Text="{Binding Persons.Count}" Margin="0,200,0,0"></TextBlock>
</Grid>

这是显示正确计数但不适用模板和人员数据的结果

Result

2 个答案:

答案 0 :(得分:0)

你试过了吗?

<TextBlock Text="{Binding Person.Name}" FontSize="40" />

答案 1 :(得分:0)

我最近做了类似的事情,并且让它有效。尝试将您的xaml更改为以下

<GridView ItemsSource="{Binding Path=Persons, Mode=TwoWay}">

<TextBlock Text="{Binding Name}" FontSize="40"/>

我没有使用集合视图源,只是直接绑定到视图模型中的observable集合。希望这会有所帮助。