WPF 列表视图/数据网格内的按钮

2024-05-01

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

ListView 和 ListView 内的按钮 https://stackoverflow.com/questions/3045872/listview-and-buttons-inside-listview

WPF - 带按钮的列表视图 https://stackoverflow.com/questions/4921046/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 将作为 null 输入。我想要这里的数据行(客户)。我该怎么做呢?


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

  • 将当前行对象作为 CommandParameter 传递。在这种情况下,您将稍微修改 OnRun 方法。 (受到推崇的)

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

I think 命令参数={绑定}工作正常,因为每行的 DataContext 都是每个 Customer 对象。

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




    private void OnRun(object o){
        if(!(o is Customer)) return;
        // Do something
    }

  
  • 或者,使用 SelectionChanged 事件处理编写一些隐藏代码。 (不建议)

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF 列表视图/数据网格内的按钮 的相关文章

随机推荐

  • Python ggplot 和 ggplotly

    前 R 用户 我曾经通过 ggplotly 函数广泛组合 ggplot 和plot ly 库来显示数据 刚接触 Python 时 我看到 ggplot 库可用 但找不到与用于图形反应显示的绘图简单组合的任何内容 我想要寻找的是这样的 fro
  • Postgresql:如何从时间戳、时区字段正确创建带有时区的时间戳

    我有一个带有时间戳但没有时区的表 年 月 日 时 分 秒 以及 时区 字段 P 代表太平洋 M 代表山地 我需要创建一个 带有时区的时间戳 类型的字段 鉴于我有两个字段 有没有办法正确考虑夏令时 具体来说 时间戳 2013 11 03 01
  • 适用于 Android 的 Google Analytics API v4 不发送屏幕视图

    我已经为 google Analytics api v4 设置了所有内容 如下所示 https developers google com analytics devguides collection android v4 https de
  • 将数组大小定义为用户输入的变量合法吗?

    我认为数组的大小应该是恒定的 我在 VS 2019 中编写代码 甚至当我执行以下操作时 const int size 5 int number size 我会收到这个错误expression must have a constant val
  • 如何将父小部件焦点重定向到子小部件?

    有一个简单的类叫做FloatingPointPropertyEditor 它继承的是QWidget并包含一个QLineEdit带有浮点数验证器的实例 class FloatingPointPropertyEditor public QWid
  • move_uploaded_file() 无法打开流

    我正在尝试通过 POST 通过 Pycurl 上传文件 在接收端使用 PHP 脚本 由于某种原因 PHP 部分似乎会导致错误 我将其精简为两个简短的测试脚本 import pycurl UPLOADURL http 127 0 0 1 ne
  • ASP.NET CLR 未启用

    当我运行我的应用程序时 在新安装的 ASP Net 和 SQL Server 上出现以下错误 Execution of user code in the NET Framework is disabled Enable clr enable
  • 无法从Windows 10 cmd运行python程序

    这是我电脑上安装python的路径A software installation python并且在环境变量中的系统路径中添加了相同的路径 我的脚本存储在A python programs但是当我尝试从 Windows 命令提示符 cmd
  • Windows/C++:是否可以找到抛出具有“异常偏移”的异常的代码行

    我们的一位用户在我们的产品启动时遇到异常 她从 Windows 向我们发送了以下错误消息 Problem Event Name APPCRASH Application Name program exe Application Versio
  • 在一组行中悬停突出显示效果

    我有一张相当大的桌子 由data属性看起来像这样 table tr td td tr tr td td tr tr td td tr tr td td tr tr td td tr tr td td tr table 我事先并不知道可能的组
  • 使用 Jack 时未生成 Dagger 2 组件

    当我启用杰克编译器 https source android com source jack html在Android Studio 2 2中Dagger 2 https google github io dagger 组件未生成 Dagg
  • 防止池进程导入 __main__ 和全局变量

    我正在使用工作人员的多处理池作为更大的应用程序的一部分 由于我用它来处理大量的简单数学 所以我有一个无共享的架构 其中工作人员需要的唯一变量作为参数传递 因此 我不需要工作子进程来导入任何全局变量 我的 main 模块 或者因此 它导入的任
  • Rails 控制器创建 Model.new 和 Model.create 之间的操作差异

    我正在浏览一些 Rails 3 和 4 教程 并发现了一些我想要的见解 Model new 和 Model create 在创建操作方面有什么区别 我以为你确实使用了create控制器中的保存方法 例如 post Post create p
  • 如何保留 Google API Android v2 中的标记?

    Marker https developers google com maps documentation android reference com google android gms maps model Marker不实施Parce
  • Kubernetes ConfigMap 大小限制

    Though resourceQuotas可能会限制命名空间中的配置映射的数量 是否有任何这样的选项来限制单个配置映射的大小 我不喜欢某些用户开始上传大型文本文件作为配置映射 ConfigMap etcd 支持的最大大小是多少 如果 etc
  • 当包含Windows.h导致错误A不是B的成员时

    以下代码是我的包含文件 但是 我发现当我使用 include
  • Datagridview 的单个单元格中的 C# 多色文本

    是否可以更改 datagridview 单元格中存在的子字符串的颜色 您需要使用细胞绘画 http msdn microsoft com en us library hta8z9sz aspx事件来自定义单元格的绘制方式
  • Ember.js 输入字段

    是否可以在 Ember js 视图中使用标准 HTML5 输入字段 或者您是否被迫使用 Ember TextField Ember CheckBox Ember TextArea 和 Ember select 等内置字段的有限选择 我似乎无
  • 是否可以使用 Flutter / Dart 创建受密码保护的 ZIP 文件?

    我想创建一个受密码保护的 ZIP 文件 以前有人这样做过吗 你能给我一些建议吗 我在 pub dev 上找不到合理的包 Plugin archive https pub dev packages archive https pub dev
  • WPF 列表视图/数据网格内的按钮

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