ListView DataTemplate中的MVVM AppBarButton
问题描述:
因此,我使用MVVM light开发UWP应用程序,并且希望在ListView中的每个项目中放置一个AppBarButton。我的项目模板代码如下:ListView DataTemplate中的MVVM AppBarButton
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="25"/>
<RowDefinition Height="25"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="40"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding title}" Grid.Column="0" HorizontalAlignment="Left" VerticalAlignment="Center"/>
<TextBlock Text="{Binding uniqueID}" Grid.Row="1" HorizontalAlignment="Left" VerticalAlignment="Center"/>
<StackPanel Grid.Column="1" Grid.RowSpan="2" Width="40" Padding="0,4">
<AppBarButton Icon="Delete" IsCompact="True" Background="Red" Width="39" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<ie:Interaction.Behaviors>
<ic:EventTriggerBehavior EventName="Click">
<ic:InvokeCommandAction Command="{Binding DataContext.DeleteItem, ElementName=page}" CommandParameter="{Binding}"/>
</ic:EventTriggerBehavior>
</ie:Interaction.Behaviors>
</AppBarButton>
</StackPanel>
</Grid>
</DataTemplate>
我这样做是相同的事件触发结合前面,这不是一个ListView内页的其他AppBarButton和它的工作完美的罚款。我已经设置了引用的命令,就像我设置较早的命令一样。该页面的DataContext设置正确,我已通过绑定到其他对象验证了其他位置。对于使用这种格式来做到这一点,我参考:Mvvm Light UWP Index Of Listitem When Button In ListItem Is Pressed
我的问题是,当我有下面的部分取消注释,我从Visual Studio中得到下面的错误。
<ie:Interaction.Behaviors>
<ic:EventTriggerBehavior EventName="Click">
<ic:InvokeCommandAction Command="{Binding DataContext.DeleteItem, ElementName=page}" CommandParameter="{Binding}"/>
</ic:EventTriggerBehavior>
</ie:Interaction.Behaviors>
集合属性 '__implicit_items' 为空。
有没有人有任何想法我做错了什么?
非常感谢!
答
我结束了使用AppBarButton的Command参数绑定到我的ViewModel中的命令。删除Interaction.Behaviors
并在XAML参数中使用此版本。
<AppBarButton Icon="Delete" Command="{Binding DataContext.DeleteCourse, ElementName=page}"
CommandParameter="{Binding}" />
BTW AppBarButton从按钮派生,肯定有地方可以绑定命令没有直接互动 –
这实际工作命令的财产!非常感谢。我不知道为什么我认为我需要这个来获得一个命令参数......如果你将它作为答案发布,我会将其标记为解决方案。 –