2014-03-30 33 views
0

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

我读过一些帖子,指出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> 

UPDATE:

所以我想通了,如何做到这一点在非MVVM方式(或者至少不是一个真正的MVVM方式)

我增加了一个项目单击事件我的ListView:

ItemClick="itemListView_ItemClick" 

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

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

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

+0

您错过了尝试绑定到列表中选定项目的“虚拟机控制”(我正在猜测)。你也可以粘贴它 –

回答

1

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