如何获得ListBox'点击项目将其打印到其他地方?

时间:2016-06-13 20:27:31

标签: c# xaml listbox uwp

我在ListBox中显示文件的行。我需要抓住用户点击的行,并将其显示为Button' s Content

我做了类似的事情:

void OnItemTapped(object sender, TappedRoutedEventArgs args)
{
    firstElement.Content = itemsControl.SelectedItem.ToString();
}

在xaml中我有:

<Button Name="firstElement"                
        Content="{Binding}"
        Grid.Row="1" Grid.Column="0"
        Tapped="OnItemTapped" />

这种方式OnItemTapped将数据发送到我的按钮。

数据来自:

<ListBox x:Name="itemsControl"
         ItemsSource="{Binding}"
         FontSize="24"
         Width="1100"
         HorizontalAlignment="Center">

问题是,ListBox中没有正确显示数据,而是MyNamespace.ItemsData这是类的地址,我保留了分割ListBox行的字符串(我显示每个5 TextBlocks行 - 每个单词一行。)

public class ItemsData
{
    public string value0 { get; set; }
    public string value1 { get; set; }
    public string value2 { get; set; }
    public string value3 { get; set; }
    public string value4 { get; set; }
}

2 个答案:

答案 0 :(得分:2)

您需要首先投射到您的模型,然后选择您需要显示的属性。像这样:

firstElement.Content = (itemsControl.SelectedItem as ItemsData).value0;

根据您的设计获取所有属性,您可以这样做:

var x = (itemsControl.SelectedItem as ItemsData);
firstElement.Content = string.Format("{0},{1},{2},{3},{4}" , x.value0 , x.value1 , x.value2 , x.value3 , x.value4);

在C#6中你可以:

firstElement.Content = string.Format($"{x.value0},{x.value1},{x.value2},{x.value3},{x.value4}");

答案 1 :(得分:0)

您可以使用ElementName绑定:

<Button Name="firstElement"                
        Content="{Binding ElementName=itemsControl, Path=SelectedItem}"
        Grid.Row="1" Grid.Column="0"/>

但是因为SelectedItem是一个ItemsClass实例,你需要覆盖它的ToString()方法来获取你需要的文本:

public class ItemsData
{
    public string value0 { get; set; }
    public string value1 { get; set; }
    public string value2 { get; set; }
    public string value3 { get; set; }
    public string value4 { get; set; }

    public string AllValues 
    {
        get 
        {
            return $"{value0} {value1} {value2} {value3} {value4}";
        }
    }

    public override string ToString()
    {
        return AllValues;
    }
}

查看this优秀文档,了解广泛的绑定属性列表。

*注意:您的列表将处理所有选择显示和突出显示,因此至少为此,您不需要使用Tapped事件。