C#WPF - ListView项目到TextBox

时间:2015-05-29 06:30:10

标签: c# wpf listview

所以我有这个课

public class User
{
    public string Name { get; set; }

    public int Age { get; set; }

    public string ID { get; set; }
}

我的窗口有一个名为“ lvUsers ”的ListView和一个名为“标签”的标签

<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

有办法吗?非常感谢你的时间。

3 个答案:

答案 0 :(得分:2)

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

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;
}

答案 1 :(得分:1)

您可以使用整洁的绑定:

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

您也可以对此进行扩展以添加字符串格式。

{{1}}

答案 2 :(得分:1)

我只是处理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;
    }