ListView SelectedItems绑定:为什么列表始终为null

Fra*_*zzi 7 c# xaml binding mvvm-light uwp

我正在使用Mvvm Light和Behaviors SDK开发UWP应用程序.我定义了一个多选ListView:

<ListView
    x:Name="MembersToInviteList"
    IsMultiSelectCheckBoxEnabled="True"
    SelectionMode="Multiple"
    ItemsSource="{Binding Contacts}"
    ItemTemplate="{StaticResource MemberTemplate}">

</ListView>
Run Code Online (Sandbox Code Playgroud)

我希望,通过绑定到MVVM-Light RelayCommand的按钮,获取包含所选项目的列表:

<Button
    Command="{Binding AddMembersToEvent}"
    CommandParameter="{Binding ElementName=MembersToInviteList, Path=SelectedItems}"
    Content="Ok"/>
Run Code Online (Sandbox Code Playgroud)

RelayCommand(MVVM-Light框架):

private RelayCommand<object> _addMembersToEvent;
public RelayCommand<object> AddMembersToEvent
{
    get
    {
        return _addMembersToEvent
            ?? (_addMembersToEvent = new RelayCommand<object>(
               (selectedMembers) =>
               {
                   // Test
                   // selectedMembers is always null!
               }));
    }
}
Run Code Online (Sandbox Code Playgroud)

我在命令中放了一个断点,我注意到selectedMembers总是null,虽然我选择了各种项目.通过控制台输出我没有看到任何绑定错误或其他.

另外,如果我作为CommandParameter传递整个列表,并在命令的定义中放置断点,我注意到我无法访问SelectedItems和SelecteRanges值.

<DataTemplate x:Name="MemberTemplate">

    <Viewbox MaxWidth="250">
        <Grid Width="250"
              Margin="5, 5, 5, 5"
              Background="{StaticResource MyLightGray}"
              BorderBrush="{StaticResource ShadowColor}"
              BorderThickness="0, 0, 0, 1"
              CornerRadius="4"
              Padding="5">

            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="1*" />
            </Grid.ColumnDefinitions>

            <Grid Grid.Column="0"
                  Width="45"
                  Height="45"
                  Margin="5,0,5,0"
                  VerticalAlignment="Center"
                  CornerRadius="50">

                <Grid.Background>
                    <ImageBrush AlignmentX="Center"
                                AlignmentY="Center"
                                ImageSource="{Binding Image.Url,
                                                      Converter={StaticResource NullGroupImagePlaceholderConverter}}"
                                Stretch="UniformToFill" />
                </Grid.Background>

            </Grid>

            <TextBlock Grid.Column="1"
                       Margin="3"
                       VerticalAlignment="Center"
                       Foreground="{StaticResource ForegroundTextOverBodyColor}"
                       Style="{StaticResource LightText}"
                       Text="{Binding Alias}" />

        </Grid>
    </Viewbox>

</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

什么原因?我怎样才能获得这样的清单?

ROM*_*MAN 6

在igralli的博客中描述了从ViewModel中的ListView传递SelectedItems(使用RelayCommands)的解决方案之一.

将ListView SelectedItems传递给Universal应用程序中的ViewModel

请尝试以下代码从参数中获取所选对象.

    private RelayCommand<IList<object>> _addMembersToEvent;
    public RelayCommand<IList<object>> AddMembersToEvent
    {
        get
        {
            return _addMembersToEvent
                   ?? (_addMembersToEvent = new RelayCommand<IList<object>>(
                       selectedMembers =>
                       {
                           List<object> membersList = selectedMembers.ToList();
                       }));
        }
    }
Run Code Online (Sandbox Code Playgroud)