我正在写一个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
答案 0 :(得分:3)
Barcodes
是您的根元素,您想要一个Barcode
项列表,因此请将其用作from
:
from barcode in searchElement.Descendants("Barcode")
作为旁注,您的空检查不正确。 barcodeProductResult
不会为空,但它的Count()
可能为0. resultsListBox
也永远不会为空。