c# WPF -列表视图项到文本框

本文关键字:文本 视图 WPF 列表 | 更新日期: 2023-09-27 17:51:12

我有这个类

public class User
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string ID { get; set; }
}

我的窗口有这个ListView名为"lvUsers"和一个标签名为"label"

<ListView Margin="10,10,237,10" Name="lvUsers" SelectionChanged="idk">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Name" Width="200" DisplayMemberBinding="{Binding Name}" />
            <GridViewColumn Header="Age" Width="Auto" DisplayMemberBinding="{Binding Age}" />
        </GridView>
    </ListView.View>
</ListView>
<Label x:Name="label" Content="Label" HorizontalAlignment="Left" Margin="380,130,0,0" VerticalAlignment="Top"/>

然后我像这样分配项目

public static List<User> users = new List<User>();
public MainWindow()
{
    InitializeComponent();
    users.Add(new User() { Name = "John", Age = 42, ID = "H42"});
    users.Add(new User() { Name = "Jacob", Age = 39, ID = "H39"});
    users.Add(new User() { Name = "Richard", Age = 28, ID = "H28"});
    lvUsers.ItemsSource = users;
}

我的问题是:是否有可能,当我在ListView中单击一个项目时,项目的ID属性将显示在一个名为"标签"的标签中。

我的意思是,当我点击一个写着John42的项目时,我希望标签显示H42

有办法吗?非常感谢您的宝贵时间。

c# WPF -列表视图项到文本框

使用绑定会容易得多,但我可以看到你正在使用事件:ListView中的SelectionChanged="idk"。所以在你的代码的窗口后面必须有(或编译时错误会发生)的方法:

private void idk(object sender, SelectionChangedEventArgs e)

所以你可以添加一些代码到idk:

private void idk(object sender, SelectionChangedEventArgs e)
{
    // your code
    if (e.AddedItems.Count != 1) 
    {
        return; // or sth else
    }
    var selectedUser = (User)e.AddedItems[0];
    this.label.Text = selectedUser.ID;
}

你可以使用一个简洁的绑定:

<Label Content="{Binding SelectedItem.ID, ElementName=lvUsers}" ...

你也可以扩展它来添加字符串格式。

{Binding SelectedItem.ID, ElementName=lvUsers, StringFormat={}H{0}}

我只是处理SelectionChanged事件:

<ListView Margin="10,154,237,10" Name="lvUsers" SelectionChanged="lvUsers_SelectionChanged">

:

    private void lvUsers_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        User u = (User)lvUsers.SelectedItem;
        this.label.Content = u.ID;
    }