WPF在ListView中绑定Command命令的写法

假定:
ViewModel中有一个数据源叫Persons,有一个命令叫DoCommand,通过System.Windows.Interactivity触发器绑定鼠标MouseUp事件,当UI端绑定了DataContext数据上下文之后,
Command="{Binding DoCommand}"是找不到这个命令的,必须使用Binging类的RelativeSource属性先找到当前UI,再找到DataContext里面的DoCommand才可以。如下所示

<ListView ItemsSource ="{Binding Persons}">
<ListView.View>
    <GridView>
        <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}"/>
        <GridViewColumn Header="Age" DisplayMemberBinding="{Binding Age}"/>
        <GridViewColumn Header="选项">
            <GridViewColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="操作">
                    <i:Interaction.Triggers>
                        <i:EventTrigger EventName="MouseUp">
                            <i:InvokeCommandAction Command="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type local:BindingWindow}},Path=DataContext.DoCommand}" 
                                                   CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=TextBlock},Path=Text}"/>
                        </i:EventTrigger>
                    </i:Interaction.Triggers>
                    </TextBlock>
                </DataTemplate>
            </GridViewColumn.CellTemplate>
        </GridViewColumn>
    </GridView>
</ListView.View>
</ListView>

关键代码:
Command="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type local:BindingWindow}},Path=DataContext.DoCommand}"

其中,BindingWindow表示当前View窗体的类名。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
WPFListView是一个非常强大的控件,它可以用于呈现列表数据。数据绑定WPF编程的一个核心概念,通过数据绑定可以将数据和UI元素进行关联。下面是一个简单的例子,演示如何使用ListView进行数据绑定。 1. 创建一个数据模型类 首先我们需要定义一个数据模型类,用于表示每个列表项的数据。例如,我们可以定义一个Person类,包含Name和Age属性。 ```csharp public class Person { public string Name { get; set; } public int Age { get; set; } } ``` 2. 创建一个ViewModel类 接下来,我们需要创建一个ViewModel类,用于管理ListView的数据源。例如,我们可以定义一个PeopleViewModel类,包含一个ObservableCollection<Person>类型的People属性,用于存储所有的Person对象。ObservableCollection是一个特殊的集合类,它可以自动通知UI元素数据源的变化。 ```csharp public class PeopleViewModel { public ObservableCollection<Person> People { get; set; } public PeopleViewModel() { People = new ObservableCollection<Person>(); People.Add(new Person { Name = "Tom", Age = 20 }); People.Add(new Person { Name = "Jerry", Age = 30 }); People.Add(new Person { Name = "Mickey", Age = 25 }); } } ``` 3. 在XAML创建ListView控件 在XAML创建ListView控件,并通过ItemsSource属性将其与ViewModel的People属性进行绑定。可以使用DataTemplate定义每个列表项的UI元素。 ```xml <ListView ItemsSource="{Binding People}"> <ListView.ItemTemplate> <DataTemplate> <StackPanel> <TextBlock Text="{Binding Name}" /> <TextBlock Text="{Binding Age}" /> </StackPanel> </DataTemplate> </ListView.ItemTemplate> </ListView> ``` 4. 在窗口代码设置DataContext 最后,在窗口代码设置DataContext为PeopleViewModel的实例。 ```csharp public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); DataContext = new PeopleViewModel(); } } ``` 这样,当窗口加载时,ListView就会自动显示ViewModel的People属性的所有数据。当数据发生变化时,ListView也会自动更新。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值