#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. Я попробовал свой вопрос, и он работает! Большое вам спасибо!