【问题标题】:Get a specific ListBox item获取特定的 ListBox 项
【发布时间】:2014-10-15 18:31:27
【问题描述】:

在我的 Windows Phone 应用程序上,使用 JSON(网络服务)填充一个 ListBox。 我需要测试一个字符串是否等于 ListBox 上的某个项目。但是我“绑定”了很多信息,我只想用{Binding codigo}进行测试。

此代码不适用于我:

private void addProduto(object sender, RoutedEventArgs e)
    {
        Fields fi = (Fields)this.List1.SelectedItem as Fields;

        foreach(var item in List1.Items)
        {
            Fields fields = item as Fields;
            if (fields.codigo == insCodProduto.Text)
            {

                MessageBox.Show("Esse produto existe!");

            }

            else
            {
                MessageBox.Show("Esse produto não existe!");
                break;
            }

        }

我的代码:

public ObservableCollection<Fields> Items { get; set; }

public class Fields
    {

        //[JsonProperty(PropertyName = "descricao")]
        public string descricao { get; set; }
        public double valor_preco_a { get; set; }
        public string codigo { get; set; }
        public string codigo1 { get; set; }


    }

XAML:

<ListBox Name="List1" ItemsSource="{Binding Items}" Margin="0,85,0,0" >
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="242" />
                                    <ColumnDefinition Width="128" />
                                    <ColumnDefinition Width="Auto" />
                                </Grid.ColumnDefinitions>
                                <StackPanel Margin="0,0,-62,17" Grid.ColumnSpan="3">
                                    <StackPanel.Background>
                                        <SolidColorBrush Color="#FF858585" Opacity="0.5"/>
                                    </StackPanel.Background>
                                    <TextBlock x:Name="NameTxt" Grid.Column="0" Text="{Binding descricao}" TextWrapping="Wrap" FontSize="20" Style="{StaticResource PhoneTextNormalStyle}"/>
                                    <TextBlock Grid.Column="1" Text="{Binding valor_preco_a, StringFormat=N2}" TextWrapping="Wrap" Margin="45,20,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
                                    <TextBlock Grid.Column="3" Text="{Binding codigo}" TextWrapping="Wrap" FontSize="35" Margin="370,-50,12,0" Style="{StaticResource PhoneTextNormalStyle}" Foreground="Blue"/>

                                </StackPanel>
                                <TextBlock Grid.Column="0" Text="R$" Margin="15,48,158,17" Style="{StaticResource PhoneTextSubtleStyle}"/>
                            </Grid>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                    <ListBox.ItemContainerStyle>
                        <Style TargetType="ListBoxItem">
                            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
                        </Style>
                    </ListBox.ItemContainerStyle>
                </ListBox>

insCodProduto:

<TextBox InputScope="Number" x:Name="insCodProduto" HorizontalAlignment="Left" TextWrapping="Wrap" VerticalAlignment="Top" Width="161" TextAlignment="Center" Margin="262,152,0,0" Height="78"/>

【问题讨论】:

  • 我已经更新了答案。希望它现在可以工作

标签: c# listbox windows-phone listboxitem


【解决方案1】:

首先将您的项目投到Fields 班级。现在你可以访问里面的属性了

Fields fields = item as Fields;

if (fields.descricao == insCodProduto.Text)
{
    //do your stuff
}

【讨论】:

  • 把它放到foreach中,这里的item就是当前循环中的item
  • 代码在 foreach 中。我编辑了我的问题。
【解决方案2】:

您需要转换每个 List Item 以从中获取特定值:

foreach(Fields item in List1.Items) //casting listbox item to "Fields"
{
    if(item.codigo.ToString() == insCodProduto.Text)    //codigo is int type so you'll have to convert it to string
    {
        MessageBox.Show("ok");
    }
}

【讨论】:

  • 我不明白为什么,但是您的示例和@Ku6opr 的示例适用于 ListBox 的第一项。仅适用于“1”位置,其他位置(至 65 位置)。
  • 你能再解释一下你想要实现什么吗?我觉得有些误会
  • 我的 ListBox 目前有 65 个项目。每一个都有一个代码({Binding codigo})。我需要验证用户插入的号码是否存在于我的 ListBox 中。
  • 根据您的问题,答案是合适的。它应该工作。你需要对foreach loop迭代做一些调试,你就会发现问题。
  • 如果我插入“code 2”,测试会跳转到“else”(说不存在)。如果我插入“代码 1”,测试表明存在。对于所有不同于“1”的代码,都不起作用。我调试了代码,但不明白为什么。 :(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-04
  • 1970-01-01
  • 2015-05-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多