gpt4 book ai didi

wpf - WPF ListView /数据网格内的按钮

转载 作者:行者123 更新时间:2023-12-02 20:18:06 24 4
gpt4 key购买 nike

我正在尝试获取单击行的值/ID。如果选择了该行,则效果很好。但如果我只是尝试单击里面的按钮,则所选客户为空。我如何在这里设置命令参数。
我尝试过查看以下问题的答案:

ListView and Buttons inside ListView

WPF - Listview with button

代码如下:

<Grid>
<ListView ItemsSource="{Binding Path=Customers}"
SelectedItem="{Binding Path=SelectedCustomer}"
Width="Auto">
<ListView.View>
<GridView>
<GridViewColumn Header="First Name">
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel Margin="6,2,6,2">
<TextBlock Text="{Binding Name}"/>
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Address">
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel Margin="6,2,6,2">
<Button Content="Address" Command="{Binding Path=DataContext.RunCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ItemsControl}}}"/>
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>

</Grid>

public class VM : ViewModelBase
{
public RelayCommand RunCommand { get; private set; }
private ObservableCollection<Customer> _Customers;
public ObservableCollection<Customer> Customers
{
get { return _Customers; }
set
{
if (value != _Customers)
{
_Customers = value;
RaisePropertyChanged("Customers");
}
}
}

private Customer _SelectedCustomer;
public Customer SelectedCustomer
{
get { return _SelectedCustomer; }
set
{
if (value != _SelectedCustomer)
{
_SelectedCustomer = value;
RaisePropertyChanged("SelectedCustomer");
}
}
}

public VM()
{
Customers = Customer.GetCustomers();
RunCommand = new RelayCommand(OnRun);
}

private void OnRun()
{
Customer s = SelectedCustomer;
}
}

在 OnRun 方法中,选定的 Customer 将作为空值传入。我想要这里的数据行(客户)。我该怎么做?

最佳答案

您可以选择三种可能的解决方案。

  • 将当前行对象作为命令参数传递。在这种情况下,您将稍微修改 OnRun 方法。 (推荐)

<Button Content="Address" Command="{Binding Path=DataContext.RunCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ItemsControl}}}" CommandParameter={Binding} />

我认为 CommandParameter={Binding} 工作正常,因为每行的 DataContext 都是每个 Customer 对象。

需要修改 OnRun 方法才能获取参数作为参数。

    private void OnRun(object o){        if(!(o is Customer)) return;        // Do something    }
  • 或者,使用 SelectionChanged 事件处理编写一些隐藏代码。 (不推荐)

  • 或者,使用 MVVM-light 工具包中的 EventToCommand。 (不推荐)

关于wpf - WPF ListView /数据网格内的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7882125/

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