ListView SelectItem绑定无法按预期工作

时间:2014-03-30 13:03:23

标签: c# mvvm windows-runtime winrt-xaml

我的Windows 8 XAML / C#应用程序有一个相当简单的listview控件。我将listview绑定到PersonList并且正常工作。但是,我想要做的并且无法找到答案的是我想要单击列表视图中的项目并能够将PersonSingle对象显示到屏幕上的其他文本框。

我已经阅读了一些帖子,表明列表视图可能不是此操作的正确控件。我在listview中遗漏了哪些内容可以让我执行此操作,还是应该使用不同的控件?

           <ListView
                x:Name="itemListView"
                Visibility="Visible"
                Width="auto"
                Height="auto"
                ItemsSource="{Binding PersonList, Mode=TwoWay}"
                SelectedItem = "{Binding PersonSingle, Mode=OneWay}"            
                ItemTemplate="{StaticResource person80Template}"
                SelectionMode="Single"
                Grid.Row="1"
                Grid.Column="1"
                VerticalAlignment="Stretch">

                <ListView.GroupStyle>
                    <GroupStyle>
                        <GroupStyle.HeaderTemplate>
                            <DataTemplate>
                                <Grid Margin="7,7,0,0">
                                    <Button
                                AutomationProperties.Name="PersonValue"
                                Content="{Binding PersonName}"
                                Style="{StaticResource TextButtonStyle}"/>
                                </Grid>
                            </DataTemplate>
                        </GroupStyle.HeaderTemplate>
                    </GroupStyle>
                </ListView.GroupStyle>
            </ListView> 

更新

所以我想出了如何以非MVVM方式(或者至少不是以真正的MVVM方式)这样做

我在ListView中添加了一个ItemClick事件:

ItemClick="itemListView_ItemClick"

然后在后面的代码中我添加了以下内容:

    private void itemListView_ItemClick(object sender, ItemClickEventArgs e)
    {
        VM.PersonSingle = ((Person)e.ClickedItem);
    }

这很有效,但就像我说的那样,它感觉不是很MVVM'。如果您对如何使其工作有任何建议而无需手动设置PersonSingle对象,请在下面回答。

1 个答案:

答案 0 :(得分:1)

您的ItemClick解决方案是正确的解决方案。如果您反对处理事件,则可以创建附加行为,但这是您的选择。