viewmodel上的ListViewItem访问属性

时间:2015-02-16 15:43:07

标签: xaml windows-store-apps

我的viewmodel上有一个用户列表,我将其传递给以下listView:

                  <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。我希望它的Visibility依赖于我在ViewModel上的bool属性。如何从listView中访问此属性?

从这里看,似乎有办法访问ListView-items父级。我想那会为我做的。有人能指出我正确的方向。感谢

1 个答案:

答案 0 :(得分:0)

执行此操作的最佳方法是将可见性设置与用户数据一起包括在内。假设您的视图模型可见性属性名为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+应用程序中不可用。