我可以将搜索结果从xelement查询到列表框,但不能从列表框到xaml文件

时间:2012-04-13 15:49:06

标签: c# xml windows-phone-7 xaml listbox

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

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

</Barcodes>

我正在使用xElement搜索xml文件,如下所示,我在列表框上得到的不是null,它对我说它已填充?!

        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;
    }

和xaml:

  <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,几乎立即停止条形码扫描器,但当我停止调试我只是在手机上的视觉工作室外运行,应用程序运行但仍然没有输出到xaml中的列表框

  

“'com.google.zxing.ReaderException'类型的第一次机会例外   发生在Silverlight_ZXing_Core.dll

     

其他信息: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 

1 个答案:

答案 0 :(得分:3)

Barcodes是您的根元素,您想要一个Barcode项列表,因此请将其用作from

from barcode in searchElement.Descendants("Barcode")

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