视图模型上的 ListViewItem 访问 属性

ListViewItem access property on viewmodel

我的视图模型上有一个用户列表,我将其传递给以下列表视图:

                  <ListView
                  Background="Azure"
                  x:Name="ContactList"                  
                  ItemsSource="{Binding Path=User}"                 
                  SelectedItem="{Binding SelectedUser, Mode=TwoWay}">
                        <ListView.ItemTemplate>
                            <DataTemplate>
                                <Border Width="300" Height="Auto" BorderThickness="1">
                                    <StackPanel>
                                        <TextBlock>
                                    <Run Text="{Binding Name}" />                            
                                    <Run Text="{Binding Age}" />
                                        </TextBlock>
                                        <CheckBox Visibility="{???}">
                                            <TextBlock FlowDirection="LeftToRight"></TextBlock>
                                        </CheckBox>
                                    </StackPanel>
                                </Border>                              
                            </DataTemplate>
                        </ListView.ItemTemplate>
                    </ListView>

如您所见,我的 DataTemplate 包含一个 checkbox。我希望它的可见性取决于我的 ViewModel 上的 bool-属性。如何从 listView 中访问此 属性?

环顾四周,似乎有一些方法可以访问 ListView-items 父项。我认为那会为我做。有人可以指出我正确的方向吗?谢谢

执行此操作的最佳方法是将可见性设置与您的用户数据一起包含在内。假设你的视图模型可见性 属性 被命名为 CheckBoxVisibility,你会得到这样的东西:

<ListView ItemsSource="{Binding}" ...>
    <ListView.ItemTemplate>
        <DataTemplate>
            ...
                <Run Text="{Binding Path=User.Name}" />
                <Run Text="{Binding Path=User.Age}" />
            ...
            <CheckBox Visibility="{Binding Path=CheckBoxVisibility}">
            ...
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

在 WPF 中,您可以使用 RelativeSource=RelativeAncestor 绑定;但是,这在 Window Store/Windows Phone 8+ 应用程序中不可用。