Включить кнопку в ListView WPF при выборе элемента и включить кнопку выбранного элемента

#wpf

#wpf

Вопрос:

У меня есть представление списка, которое содержит в каждом элементе кнопку, я хочу, когда пользователь нажимает на элемент и какую кнопку элемента, который выбран для включения в MVVM! Извините за мой плохой английский! Это мой код Xaml:

 <ListView ItemsSource="{Binding ListSupplier}"
                        SelectedItem="{Binding SelectedItems, Mode=OneWayToSource}">
                            <ListView.Resources>
                                <Style TargetType="ListViewItem">
                                    <Style.Triggers>
                                        <Trigger Property="IsKeyboardFocusWithin" Value="True">
                                            <Setter Property="IsSelected" Value="True"/>
                                        </Trigger>
                                    </Style.Triggers>
                                </Style>
                            </ListView.Resources>
                            <ListView.View>
                                <GridView>
                                    <GridViewColumn
                                    DisplayMemberBinding="{Binding ID}"
                                    Header="ID" />
                                    <GridViewColumn
                                    DisplayMemberBinding="{Binding DisplayName}"
                                    Header="Nhà cung cấp" />
                                    <GridViewColumn
                                    DisplayMemberBinding="{Binding Address}"
                                    Header="Địa chỉ" />
                                    <GridViewColumn
                                    DisplayMemberBinding="{Binding Phone}"
                                    Header="Số điện thoại" />
                                    <GridViewColumn
                                    DisplayMemberBinding="{Binding ContractDay}"
                                    Header="Thời gian hợp tác" />
                                    <GridViewColumn Width="Auto" Header="Chức Năng">
                                        <GridViewColumn.CellTemplate>
                                            <DataTemplate>
                                                <Button x:Name="Button_Edit" DataContext="{StaticResource SupplierViewModel}" 
                                                        Command="{Binding EditCommand}" CommandParameter="{Binding ElementName=Button_Edit}" 
                                                        Content="Sửa" Width="100"/>
                                            </DataTemplate>
                                        </GridViewColumn.CellTemplate>
                                    </GridViewColumn>
                                </GridView>
                            </ListView.View>
                        </ListView>
 

Это моя команда редактирования в SupplierViewModel:

 EditCommand = new RelayCommand<Button>((p) =>
            {
                /*var Supplier = DataProvider.Ins.Entities.SupplierTable.Where(x => x.DisplayName == DisplayName);

                if (string.IsNullOrEmpty(DisplayName) || string.IsNullOrEmpty(Phone) || string.IsNullOrEmpty(Address) || ContractDay == null)
                    return false;

                if (Supplier == null || SelectedItems == null)
                    return false;
                if(p != null)
                {
                    p.IsEnabled = true;
                    return true ;
                }
                return false*/ //Comment
                return false;
            }, (p) =>
            {
                var Supplier = DataProvider.Ins.Entities.SupplierTable.Where(x => x.DisplayName == DisplayName);
                if (Supplier == null || SelectedItems == null)
                {
                    p.IsEnabled = false; 
                    return;
                }
                SelectedItems.

                SupplierTable EditItem = DataProvider.Ins.Entities.SupplierTable.Where(x=>x.ID == SelectedItems.ID).SingleOrDefault();
                if(EditItem == null)
                {
                    return;
                }
                EditItem.DisplayName = DisplayName;
                EditItem.Address = Address;
                EditItem.ContractDay = ContractDay;
                EditItem.Phone = Phone;

                DataProvider.Ins.Entities.SaveChanges();
                ListSupplier = new List<SupplierTable>(DataProvider.Ins.Entities.SupplierTable);

                DisplayName = null;
                Address = null;
                Phone = null;
                ContractDay = DateTime.Today;
                SelectedItems = null;

                IsActiveSnackBar = true;
                Message = "Sửa Thành Công!";

                System.Timers.Timer timer = new System.Timers.Timer();
                timer.Interval = 3000;
                timer.Enabled = true;
                timer.Elapsed  = ShowSnackBar;
                timer.Start();
            });
 

Я не знаю, как найти кнопку в listview, которая выбрана, я хочу, чтобы кнопка в выбранном элементе списка была включена, а другая — отключена!

Ответ №1:

Этот XAML устанавливает свойство IsEnabled для кнопки, если выбран элемент ListViewItem.

Вам нужно снова добавить командную часть, чтобы что-то сделать при нажатии на кнопку.

                     <GridViewColumn.CellTemplate>
                    <DataTemplate>
                            <Button x:Name="Button_Edit" IsEnabled="{Binding Path=IsSelected, 
                                    RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListViewItem}}}"
                                    Width="100" Content="Sửa"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
 

Комментарии:

1. Большое вам спасибо! Это работает! Могу ли я сделать то же самое с текстовым полем?

2. Я попробовал свой вопрос, и он работает! Большое вам спасибо!