gpt4 book ai didi

c# - 通过按钮在 ListView 中进行单选

转载 作者:太空宇宙 更新时间:2023-11-03 22:12:06 25 4
gpt4 key购买 nike

目标:
需要在 ListView 中选择单行包含按钮。

问题:
当您单击位于 ListView 内部的按钮时,不知道如何在 ListView 中进行单个选择。在一个简单的解释中,当点击按钮时,不会在 ListView 的行中应用任何选择

如果在进入按钮的方法之前应用选择会很棒,因为我需要从应该发送到业务逻辑的 ListView 的单个选择中获取信息。


private void btnBuy_Click(object sender, RoutedEventArgs e)
{

}
<ListView Height="242.47" Canvas.Left="8" Canvas.Top="49.53" Width="435.22" Name="lstOrder" ItemsSource="{Binding}"
PreviewMouseLeftButtonUp="lstOrder_PreviewMouseLeftButtonUp" SelectionChanged="lstOrder_SelectionChanged"
SelectionMode="Single">
<ListView.View>
<GridView>
<GridViewColumn Header="Article Number" Width="auto" DisplayMemberBinding="{Binding Path=_articleNumber}"
TextBlock.TextAlignment="Left"
HeaderContainerStyle="{StaticResource ListViewHeaderRightAlignedStyle}" />
<GridViewColumn Header="Name" Width="auto" DisplayMemberBinding="{Binding Path=_name}"
TextBlock.TextAlignment="Left"
HeaderContainerStyle="{StaticResource ListViewHeaderRightAlignedStyle}" />
<GridViewColumn Header="Sale Price" Width="auto" DisplayMemberBinding="{Binding Path=_salePrice}"
TextBlock.TextAlignment="Left"
HeaderContainerStyle="{StaticResource ListViewHeaderRightAlignedStyle}" />
<GridViewColumn Header="Product Category" Width="auto"
DisplayMemberBinding="{Binding Path=_productCategory}" TextBlock.TextAlignment="Left"
HeaderContainerStyle="{StaticResource ListViewHeaderRightAlignedStyle}" />
<GridViewColumn Header="Quantity" Width="auto" DisplayMemberBinding="{Binding Path=_quantity}"
TextBlock.TextAlignment="Left"
HeaderContainerStyle="{StaticResource ListViewHeaderRightAlignedStyle}" />
<GridViewColumn>
<GridViewColumn.CellTemplate>
<DataTemplate>
<Button Name="btnBuy" MinHeight="20" MinWidth="50" Content="Buy" Click="btnBuy_Click" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>

namespace MediaStore
{
/// <summary>
/// Interaction logic for Counter.xaml
/// </summary>
public partial class Counter : Window
{
private ManagerProduct _myManagerProduct;
private ManagerCart _myManagerCart;

public Counter(ManagerProduct pManagerProduct, ManagerCart pMyManagerCart)
{
this.InitializeComponent();

_myManagerProduct = pManagerProduct;
_myManagerCart = pMyManagerCart;


lstOrder.AddHandler(ListViewItem.UnselectedEvent, new RoutedEventHandler(ItemSelected), true);


UpDateGUI();
}


public void UpDateGUI()
{
FillDataInListView();
}

private void FillDataInListView()
{
lstOrder.DataContext = _myManagerProduct.GetAllProductList();
}

#region Tab Order - 1. Order

private void btnBuy_Click(object sender, RoutedEventArgs e)
{

}

private void btnDisplayCart_Click(object sender, RoutedEventArgs e)
{

}

private void btnCheckout_Click(object sender, RoutedEventArgs e)
{
cvsOrder.Visibility = Visibility.Hidden;

cvsConfirmation.Margin = new Thickness(8, 8, 8, 17);
}

private void lstOrder_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{


}


private void ItemSelected(object sender, RoutedEventArgs e)
{

}


private void lstOrder_SelectionChanged(object sender, SelectionChangedEventArgs e)
{

}
#endregion

}

}

最佳答案

您不需要选择 ListViewItem,您可以从 ButtonDataContext 中获取数据对象,并且不需要其他行的数据,因为您无论如何想要一个单一的选择。

在事件处理程序中:

var data = (sender as FrameworkElement).DataContext as MyData;

(顺便说一句,话虽如此,您是否需要选择?如果不使用 ItemsControl)

要使 ListViewItem 在单击按钮时选择自身,您可以使用 ItemContainerStyle,如下所示:

<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="IsSelected"
Value="{Binding RelativeSource={RelativeSource Self}, Path=IsKeyboardFocusWithin, Mode=OneWay}" />
</Style>
</ListView.ItemContainerStyle>

这是一个使用动画的替代方法,它在 ListView 失去焦点后保留所选项目(仅适用于 ListView.SelectionModeSingle因为似乎无法使用动画清除先前的选择):

<Style TargetType="{x:Type ListViewItem}">
<Style.Triggers>
<DataTrigger
Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsKeyboardFocusWithin, Mode=OneWay}"
Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="IsSelected">
<DiscreteBooleanKeyFrame KeyTime="0" Value="True" />
</BooleanAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
</Style>

关于c# - 通过按钮在 ListView 中进行单选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6255243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com