繁体   English   中英

ListView Item WPF MVVM里面的绑定Button命令

[英]Binding Button command which inside ListView Item WPF MVVM

我有一个输出内容的 ListView。 共4列:章节号、标题、编辑按钮、删除按钮 点击按钮时,需要获取其所在的元素(例如章节号或章节名称)。 我尝试通过 ListView 名称和 FindAncestor 进行绑定,但什么也没发生。 请帮助解决问题或指出错误

XAML:

<ListView Name="TableOfContents" 
                              ItemsSource="{Binding Path=ContentList}" 
                              Background="{x:Null}" Width="600"
                              ScrollViewer.VerticalScrollBarVisibility="Auto"
                              ScrollViewer.HorizontalScrollBarVisibility="Auto"
                              ScrollViewer.CanContentScroll="True"                              
                              BorderBrush="{x:Null}">

                        <i:Interaction.Triggers>
                            <i:EventTrigger EventName="MouseDoubleClick">
                                <i:InvokeCommandAction 
                                    Command="{Binding Command}"
                                    CommandParameter="{Binding ElementName=TableOfContents, Path=SelectedItem}"/>
                            </i:EventTrigger>
                        </i:Interaction.Triggers>

                        <ListView.View>
                            <GridView>
                                <GridViewColumn Width="50">
                                    <GridViewColumn.CellTemplate>
                                        <DataTemplate>
                                            <TextBlock Text="{Binding ThemeID}" TextWrapping="Wrap"
                                                       Foreground="Black" FontSize="30"
                                                       TextAlignment="Center"/>
                                        </DataTemplate>
                                    </GridViewColumn.CellTemplate>
                                </GridViewColumn>
                                <GridViewColumn Width="460">
                                    <GridViewColumn.CellTemplate>
                                        <DataTemplate>
                                            <TextBlock Text="{Binding ThemeName}" TextWrapping="Wrap"
                                                       Foreground="Black" FontSize="20"/>
                                        </DataTemplate>
                                    </GridViewColumn.CellTemplate>
                                </GridViewColumn>
                                <GridViewColumn Width="40">
                                    <GridViewColumn.CellTemplate>
                                        <DataTemplate>
                                            <Button Content="🖊" ToolTip="Редактировать"
                                                       Foreground="Black" FontSize="18"
                                                    Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, 
                                                                                      AncestorType={x:Type ItemsControl}},
                                                                      Path=TableOfContentsPageViewModel.EditTheme}"/>
                                        </DataTemplate>
                                    </GridViewColumn.CellTemplate>
                                </GridViewColumn>
                                <GridViewColumn Width="40">
                                    <GridViewColumn.CellTemplate>
                                        <DataTemplate>
                                            <Button Content="❌" ToolTip="Удалить"
                                                    Foreground="Black" FontSize="18"
                                                    Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, 
                                                                                      AncestorType={x:Type ItemsControl}},
                                                                      Path=TableOfContentsPageViewModel.DeleteTheme}"/>
                                        </DataTemplate>
                                    </GridViewColumn.CellTemplate>
                                </GridViewColumn>


                            </GridView>
                        </ListView.View>
                    </ListView>

视图模型:

class TableOfContentsPageViewModel:BaseViewModel, IPageViewModel
    {
        public string SearchedChapter { get; set; }
        public Visibility CanEdit { get; set; } = Visibility.Hidden;
        public Theme SelectedTheme { get; set; }

        public ObservableCollection<Theme> ContentList { get; set; }

        public TableOfContentsPageViewModel()
        {
            ContentList = new ObservableCollection<Theme>(TrainSQL_Commands.GetAllThemes());
            CanEdit = CurrentUser.Role == "Administrator" ? Visibility.Visible : Visibility.Hidden;
        }

        private ICommand _editTheme;
        public ICommand EditTheme
        {
            get
            {
                return _editTheme ?? (_editTheme = new RelayCommand(x =>
                  {
                      MessageBox.Show("Edit theory");
                  }));
            }
        }

        private ICommand _deleteTheory;
        public ICommand DeleteTheme
        {
            get
            {
                return _deleteTheory ?? (_deleteTheory = new RelayCommand(x =>
                {
                    MessageBox.Show("Delete theory");
                }));
            }
        }
    }

图片: https://i.stack.imgur.com/cpROA.png

欢迎来到 SO!

RelativeSource 绑定到控件本身,而不是通过 DataContext (当您考虑它时这是有道理的)。 您当前正在绑定到路径TableOfContentsPageViewModel.DeleteTheme ,您需要将其更改为DataContext.TableOfContentsPageViewModel.DeleteTheme

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM