我在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; }
}
答案 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事件。