【问题标题】:Getting selected item string from bound ListBox从绑定的 ListBox 中获取选定的项目字符串
【发布时间】:2012-03-01 08:07:07
【问题描述】:

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

“MyApp.Item”

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

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>

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

【问题讨论】:

    标签: c# windows-phone-7 xaml


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      很简单,试试看:

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

      【讨论】:

        【解决方案3】:

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

        SelectedItem = {Binding SelectedItem}
        

        并将您的 ItemsSource 重命名为“Items”,这样更有意义。

        您的代码隐藏或 ViewModel 中的 SelectedItem 应该包含一个属性:

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

        【讨论】:

          【解决方案4】:

          试试这个...

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

          【讨论】:

            【解决方案5】:

            试试

              listBox.SelectedItem.ToString()
            

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-04-24
              • 2022-10-17
              • 1970-01-01
              • 2016-11-06
              • 1970-01-01
              相关资源
              最近更新 更多