c# - 从绑定(bind)的 ListBox 中获取选定的项目字符串

标签 c# windows-phone-7 xaml

我在从列表框中的绑定(bind)文本 block 获取字符串时遇到问题,当我使用下面的代码时,我可以绑定(bind)列表框并且列表框显示了项目,但是当单击列表中的项目时我没有得到正确的字符串,我打印了一个消息框,其中包含对象名称的消息,例如

"MyApp.Item"

出现了。 myApp 是应用程序的名称,Item 是我绑定(bind)到列表框的模型的名称。当列表框未绑定(bind)时,所选项目的正确文本会显示。

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>

如果你能帮助我,我将不胜感激

最佳答案

您要绑定(bind)到 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 设置为将在上面的第三行中被覆盖的空字符串。我想保留它,以便您了解我在您的代码中所做的更改。

关于c# - 从绑定(bind)的 ListBox 中获取选定的项目字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9200945/

相关文章:

c# - 在 visual studio 中创建大括号的快捷方式

c# - HttpListener 类可以用于嗅探吗?

c# - 如何从我的 Windows Phone 7 模拟器获取数据

c# - LINQ to SQL多对多关系Insert和Delete问题

c# - 为什么这个翻译动画不起作用?

c# - 如何对依赖于控制台的 switch 语句进行单元测试

c# - 加载和保存颜色值

c# - 强制文本长度 + 修剪

c# - 对应 map 缩放/移动 Action 的Transform Path/Polyline

c# - 如何防止重叠时出现双倍厚度的边框?