【问题标题】:MVVM AppBarButton in Listview DataTemplateListview DataTemplate 中的 MVVM AppBarButton
【发布时间】:2017-10-01 07:08:24
【问题描述】:

所以我正在使用 MVVM light 开发 UWP 应用程序,我想在 ListView 的每个项目中放置一个 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”为空。

有人知道我做错了什么吗?

非常感谢!!

【问题讨论】:

  • BTW AppBarButton 派生自 Button 并且肯定有一个 Command 属性,您可以在其中直接绑定命令而无需交互
  • 这确实有效!非常感谢。我不知道为什么我认为我需要它来获取命令参数...如果您将其发布为答案,我会将其标记为解决方案。

标签: c# xaml mvvm uwp uwp-xaml


【解决方案1】:

我最终使用 AppBarButton 的 Command 参数绑定到 ViewModel 中的命令。删除 Interaction.Behaviors 并在 XAML 参数中使用此构建是有效的。

<AppBarButton Icon="Delete" Command="{Binding DataContext.DeleteCourse, ElementName=page}" 
    CommandParameter="{Binding}" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-25
    • 2012-05-04
    • 2019-10-18
    • 1970-01-01
    相关资源
    最近更新 更多