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属性将显示在一个名为"标签"的标签中。
我的意思是,当我点击一个写着John和42的项目时,我希望标签显示H42。
有办法吗?非常感谢您的宝贵时间。
使用绑定会容易得多,但我可以看到你正在使用事件: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;
}