从绑定的 ListBox 中获取选定项字符串

3

我有一个问题,无法从绑定到listbox中的textblock中获取字符串。使用以下代码,我可以将listbox绑定,并且在listbox中显示项目,但是当单击列表中的项时,我无法获得正确的字符串,我显示一个带有对象名称的消息框,如

"MyApp.Item"

所示。myApp是应用程序的名称,Item是我绑定到listbox的模型的名称。当未绑定listbox时,所选项中的正确文本显示出来。

private void listBoxtrend_Tap(object sender, GestureEventArgs e)
{
    selectedText = "";

    selectedText = listBox.SelectedValue.ToString();

    MessageBox.Show(selectedText);
}

xml

<ListBox ItemsSource="{Binding Item}" Foreground="RoyalBlue" 
    Height="395" HorizontalAlignment="Center" 
    Margin="12,111,0,0" Name="listBox" 
    VerticalAlignment="Top" Width="438"
    TabIndex="10"  Tap="listBox_Tap" >
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock TextWrapping="Wrap" FontSize="26" HorizontalAlignment="Left"
                Name="tblItem" Text="{Binding ItemString}"
                VerticalAlignment="Top" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

我真的很感激如果你能帮助我,谢谢

5个回答

8

您正在绑定DataTemplate的TextBlock中的ItemString和ListView中的Item Collection。因此,SelectedValue将是Item类型的。您实际上应该在Tap处理程序中执行以下操作以获取ItemString的值...

private void listBoxtrend_Tap(object sender, GestureEventArgs e)
{
    selectedText = "";

    var selected = listBox.SelectedValue as Item;
    selectedText = selected.ItemString;

    MessageBox.Show(selectedText);
}

在你的例子中,ToString 打印出了类的名称。你也可以在你的 Item 模型中重写 ToString 方法,使其成为你想要的字符串。
注意:类型等可能有些不准确,我根据你在问题中写的内容猜测了一下。此外,在上面第三行中没有必要将 selectedText 设置为空字符串,因为它将在那里被覆盖。我希望保留它,这样你就可以了解我在你的代码中做了哪些更改。

3

非常简单,试着按照以下步骤操作:

string selectedText = ListBox.GetItemText(ListBox.SelectedItem);

1

你还需要将Listbox的SelectedItem设置为某个值。

SelectedItem = {Binding SelectedItem}

把你的ItemsSource改成"Items",因为这更合理。

然后你的代码后台或者ViewModel中的SelectedItem应该包含一个属性:

public class Item
{
    public string ItemString { get;set; }
}

1

试一下这个...

string ListBoxConent  = ((ListBoxItem)listbox.SelectedItem).Content.ToString();

0

尝试一下

  listBox.SelectedItem.ToString()

如果在ValueMember中未指定属性,则SelectedValue返回对象的ToString方法的结果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接