簡體   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