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)
什么原因?我怎样才能获得这样的清单?
在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)
| 归档时间: |
|
| 查看次数: |
3360 次 |
| 最近记录: |