我正在使用 Mvvm Light 和 Behaviors SDK 开发 UWP 应用程序。我定义了一个多选的 ListView:
<ListView
x:Name="MembersToInviteList"
IsMultiSelectCheckBoxEnabled="True"
SelectionMode="Multiple"
ItemsSource="{Binding Contacts}"
ItemTemplate="{StaticResource MemberTemplate}">
</ListView>
我想要一个绑定(bind)到 MVVM-Light 的按钮RelayCommand , 获取包含所选项目的列表:
<Button
Command="{Binding AddMembersToEvent}"
CommandParameter="{Binding ElementName=MembersToInviteList, Path=SelectedItems}"
Content="Ok"/>
RelayCommand(MVVM-Light 框架):
private RelayCommand<object> _addMembersToEvent;
public RelayCommand<object> AddMembersToEvent
{
get
{
return _addMembersToEvent
?? (_addMembersToEvent = new RelayCommand<object>(
(selectedMembers) =>
{
// Test
// selectedMembers is always null!
}));
}
}
我在命令中放置了一个断点,我注意到 selectedMembers 始终为 null
,尽管我选择了多个项目。通过控制台输出,我没有看到任何绑定(bind)错误或其他错误。
此外,如果我将整个列表作为 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>
这是什么原因?我怎样才能得到这样的列表?
最佳答案
在 igralli 的博客中描述了在 ViewModel(使用 RelayCommands)中从 ListView 传递 SelectedItems 的解决方案之一。
Pass ListView SelectedItems to ViewModel in Universal apps
尝试使用以下代码从参数中获取选定的对象。
private RelayCommand<IList<object>> _addMembersToEvent;
public RelayCommand<IList<object>> AddMembersToEvent
{
get
{
return _addMembersToEvent
?? (_addMembersToEvent = new RelayCommand<IList<object>>(
selectedMembers =>
{
List<object> membersList = selectedMembers.ToList();
}));
}
}
关于c# - ListView SelectedItems 绑定(bind) : why the list is always null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34822340/