【问题标题】:Cannot bind List View with Data Template无法将列表视图与数据模板绑定
【发布时间】:2013-03-25 04:05:45
【问题描述】:

我正在使用MVVM,当我右键单击我的ListView 时,我想调用Command。我做了很多搜索,但我的问题没有解决。

我使用这个 XAML 代码

<ListView ItemsSource="{Binding LibraryList}"
          x:Name="MediaList" 
          Visibility="{Binding MediaListVisibility}"
          Margin="149,18,-1,0"
          BorderBrush="#FF8BCD7F"
          BorderThickness="0"
          Background="White">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="MouseDoubleClick">
            <i:InvokeCommandAction Command="{Binding ChooseMediaCommand}"
                CommandParameter="{Binding SelectedValue, ElementName=MediaList}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
    <ListView.View>
        <GridView>
            <GridViewColumn DisplayMemberBinding="{Binding Name}" Header="Name" Width="300" />
            <GridViewColumn DisplayMemberBinding="{Binding Time}" Header="Time" Width="70" />
            <GridViewColumn DisplayMemberBinding="{Binding Artist}" Header="Artist" Width="120" />
            <GridViewColumn DisplayMemberBinding="{Binding Album}" Header="Album" Width="120" />
            <GridViewColumn DisplayMemberBinding="{Binding Year}" Header="Year" Width="80" />
        </GridView>
    </ListView.View> 
    <ListView.ContextMenu>
        <ContextMenu>
            <MenuItem Header="Add to playlist" ItemsSource="{Binding PlaylistsList}">
                <MenuItem.ItemTemplate>
                    <DataTemplate>
                        <MenuItem Header="{Binding Name}"
                                  Command="{Binding AddToPlaylistCommand}"
                                  CommandParameter="{Binding Name}"/>
                    </DataTemplate>
                </MenuItem.ItemTemplate>
            </MenuItem>
            <MenuItem Header="Remove"/>
        </ContextMenu>
    </ListView.ContextMenu>

错误信息:

System.Windows.Data 错误:40:BindingExpression 路径错误:在“对象”“播放列表”(HashCode=16901761)上找不到“AddToPlaylistCommand”属性。 BindingExpression:Path=AddToPlaylistCommand; DataItem='播放列表' (HashCode=16901761);目标元素是'MenuItem'(名称='');目标属性是“Command”(输入“ICommand”)

【问题讨论】:

  • AddToPlaylistCommand 声明在哪里?
  • 请告诉我们PlayList的实现。
  • 它在我的 ViewModel
  • 您的Playlist 类是否包含名为AddToPlaylistCommand 的属性?可以发一下出处吗?
  • 没有我的属性 AddToPlaylistCommand 在我的 MainWindowViewModel.cs 上实现,就像我正确使用的其他 ICommand 一样

标签: c# wpf listview binding


【解决方案1】:
Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.AddToPlaylistCommand}"

【讨论】:

    【解决方案2】:
    Command="{Binding Path=DataContext.AddToPlaylistCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}"
    

    【讨论】:

    • 请充实你的答案。
    【解决方案3】:

    像这样使用相对源(假设你的控件是一个窗口)

    Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}, Path=AddToPlaylistCommand}"
    

    【讨论】:

    • 我有这个:System.Windows.Data 错误:40:BindingExpression 路径错误:在“对象”“MainWindow”(名称=“mainWindow”)上找不到“AddToPlaylistCommand”属性。 BindingExpression:Path=AddToPlaylistCommand;数据项='主窗口'(名称='主窗口');目标元素是'MenuItem'(名称='');目标属性是“Command”(输入“ICommand”)
    • 正如他所说,它在他的数据上下文中,而不是在他的窗口中。
    • 是的,它在我的 dataContext 中,我不知道如何使用它。
    • @Gims 你可以用这个代码做Path=DataContext.AddToPlaylistCommand
    猜你喜欢
    • 1970-01-01
    • 2017-05-22
    • 2019-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    相关资源
    最近更新 更多