1

我正在编写一个 Windows Phone 7 应用程序,我有一个看起来像这样的 xml 文件

    <Barcodes>
  <Barcode code="7393997155338"
           companyName="Garbo Food AB"
           productName="Toast Loaf"/>

</Barcodes>

我正在使用 xElement 搜索 xml 文件,如下所示,我在列表框上没有得到空值,它告诉我它已填充?!?

        var searchElement = XElement.Load("storedBarcodes.xml");
        var barcodeProductResult = from var in searchElement.Descendants("Barcodes") 
                                   where var.Attribute("code").Value == b
                                   select new ProductBarcodes()
                                   {
                                       code = var.Attribute("code").Value,
                                       companyName = var.Attribute("companyName").Value,
                                       productName = var.Attribute("productName").Value

                                   };
        if (barcodeProductResult != null)
        {
            tbSuccessfullSearchOrNot.Text = ("Search has found a matching product!");

            if (resultsListBox != null)
            {

                resultsListBox.ItemsSource = barcodeProductResult;
                tbSuccessfullSearchOrNot.Text = ("Search has found a matching product! but listbox is not empty");
            }
            else
            {

                tbSuccessfullSearchOrNot.Text = ("Search has found a matching product! but listbox is empty");
            }
                //tbProductBarcode.Text = ("Product Barcode : " + _code + Environment.NewLine);
            //tbCompanyName.Text = ("Company Name: " + _companyName + Environment.NewLine);
        }
        else
        {
            tbSuccessfullSearchOrNot.Text = ("No matching product found!");
        }

填充列表框后,它应该在屏幕上输出,如下所示,我正在尝试几种方法,即。使用 {Binding Path=Element[code].Value}" 和 Text="{Binding code},结果在输出屏幕上为空,

    <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
    <StackPanel>
        <Button Height="150" Content="Press here to scan a barcode !!" Click="Button_Click" Foreground="#FF2FFF07" />
        <TextBlock Margin="30" FontSize="36" TextWrapping="Wrap"   x:Name="tbSuccessfullSearchOrNot"/>
        <TextBlock Margin="30" FontSize="36" TextWrapping="Wrap"   x:Name="tbScanResultBarCode"/>
        <ListBox x:Name="resultsListBox" TabIndex="8" ItemsSource="barcodeProductResult" >
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Margin="10" >
                        <TextBlock x:Name="results" Text="{Binding code}"   FontSize="22" FontWeight="Bold" FontStyle="Italic" Foreground="Orange"  />
                        <TextBlock Text="{Binding Path=Element[code].Value}" Foreground="Black"/>
                        <TextBlock Text="{Binding companyName}" Foreground="Black"/>
                        <TextBlock Text="{Binding productName}" Foreground="Black"/>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
        <!--<TextBlock Height="346" FontSize="36" x:Name="tbProductDetails" TextWrapping="Wrap"  Width="450" >

        </TextBlock>-->
        <TextBox Height="71" Name="tbProductBarcode"  Width="460" IsEnabled="False" IsReadOnly="True" DataContext="{Binding ElementName=tbProductBarcode}" />
        <TextBox Height="71" Name="tbCompanyName"  Width="460" IsEnabled="False" IsReadOnly="True" />
        <TextBox Height="71" Name="tbProductName"  Width="460" IsEnabled="False" IsReadOnly="True" />
        <!--<Button Height="150" Content="Tap to scan a QR code" Click="Button_Click_1"/>
        <TextBlock Margin="30" FontSize="36" TextWrapping="Wrap" x:Name="tbScanResultQR"/>-->

    </StackPanel>
</Grid>

帖子编辑:这是我搜索的代码。这行得通,

       private void menuBtn_Click(object sender, RoutedEventArgs e)
    {
        var element = XElement.Load("SearchFile.xml");
        var filteredData = from var in element.Descendants("chipper")
                           where var.Attribute("County").Value.ToLower()==tbSearch.Text.ToLower() 
                           select new Counties()
                           {
                               LName = var.Attribute("LName").Value,
                               PlAddress = var.Attribute("PlAddress").Value,
                               County= var.Attribute("County").Value,
                               PhoneNumber = var.Attribute("PhoneNumber").Value


                           };

        ChipperListBox.ItemsSource = filteredData;
    }

和xml:

  <StackPanel x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,90" Orientation="Horizontal">
    <ListBox x:Name="ChipperListBox" SelectionChanged="listBox_SelectionChanged">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Margin="10" >
                    <TextBlock x:Name="chipName" Text="{Binding LName}"   FontSize="22" FontWeight="Bold" FontStyle="Italic" Foreground="Orange" Tap="chipName_Tap" />
                    <TextBlock Text="{Binding PlAddress}" Foreground="Black"/>
                    <TextBlock Text="{Binding County}" Foreground="Black"/>
                    <TextBlock Text="{Binding PhoneNumber}" Foreground="Black"/>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</StackPanel>

编辑:我在 Windows 手机上取消此应用程序,因为模拟器没有摄像头。在将元素名称更改为“条形码”后,来自调用堆栈的信息我得到一个 readerException,它几乎立即停止条形码扫描仪但是当我停止调试时我运行再次在手机上的 Visual Studio 之外运行应用程序,但仍然没有输出到 xaml 中的列表框

“在 Silverlight_ZXing_Core.dll 中发生了‘com.google.zxing.ReaderException’类型的第一次机会异常

附加信息:ReaderException"

Silverlight_ZXing_Core.dll!com.google.zxing.oned.UPCEANReader.findGuardPattern(com.google.zxing.common.BitArray row, int rowOffset, bool whiteFirst, int[] pattern) + 0xf1 bytes    
    Silverlight_ZXing_Core.dll!com.google.zxing.oned.UPCEANReader.findStartGuardPattern(com.google.zxing.common.BitArray row) + 0x8 bytes   
    Silverlight_ZXing_Core.dll!com.google.zxing.oned.UPCEANReader.decodeRow(int rowNumber, com.google.zxing.common.BitArray row, System.Collections.Generic.Dictionary<object,object> hints)    
    Silverlight_ZXing_Core.dll!com.google.zxing.oned.OneDReader.doDecode(com.google.zxing.BinaryBitmap image, System.Collections.Generic.Dictionary<object,object> hints) + 0x113 bytes 
    Silverlight_ZXing_Core.dll!com.google.zxing.oned.OneDReader.decode(com.google.zxing.BinaryBitmap image, System.Collections.Generic.Dictionary<object,object> hints) 
    Silverlight_ZXing_Core.dll!com.google.zxing.oned.OneDReader.decode(com.google.zxing.BinaryBitmap image) + 0x3 bytes 
>   WP7.ScanBarCode.dll!WP7.ScanBarCode.BarCode.cam_AutoFocusCompleted(object sender, Microsoft.Devices.CameraOperationCompletedEventArgs e) Line 114 + 0x7 bytes   C#
    Microsoft.Phone.dll!Microsoft.Devices.Camera.SafeFireEvent<Microsoft.Devices.CameraOperationCompletedEventArgs>.AnonymousMethod__1f(object ignored) + 0x17 bytes    
    mscorlib.dll!System.Threading.ThreadPool.WorkItem.WaitCallback_Context(object state) + 0x18 bytes   
    mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state) + 0x63 bytes    
    mscorlib.dll!System.Threading.ThreadPool.WorkItem.doWork(object o) + 0x47 bytes 
    mscorlib.dll!System.Threading.Timer.ring() + 0x70 bytes 
4

1 回答 1

3

Barcodes是你的根元素,你想要一个Barcode项目列表,所以使用它作为你的from

from barcode in searchElement.Descendants("Barcode")

作为旁注,您的空检查不正确。barcodeProductResult不会为空,但它的 a 可能Count()为 0。resultsListBox也永远不会为空。

于 2012-04-13T16:25:48.167 回答