2013-12-09 177 views
0

我想使用來自XElement的數據填充位於usercontrol內的數據網格。 datagrid構建行,但其中沒有值顯示。我在輸出窗口中顯示System.Windows.Data Error: 40 : BindingExpression path error: 'Value' property not found on 'object'。不知道我做錯了什麼,我看過幾個使用這種方法的例子。我認爲它可能與datagrid的位置有關,該位置位於usercontrol內,但不確定。使用XElement填充WPF數據網格

的的XElement:

<root> 
    <option symbol="AAPL131221P00700000" type="P"> 
     <strikePrice>700</strikePrice> 
     <lastPrice>179.53</lastPrice> 
     <change>0</change> 
     <changeDir /> 
     <bid>NaN</bid> 
     <ask>NaN</ask> 
     <vol>30</vol> 
     <openInt>60</openInt> 
    </option> 
</root> 

XAML:

<UserControl x:Class="OptionWPF.DataPane" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     mc:Ignorable="d" 
     d:DesignHeight="300" d:DesignWidth="300"> 

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="3*"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
    <DataGrid AutoGenerateColumns="False" 
       Grid.Row="0" 
       RowHeaderWidth="0" 
       AlternationCount="2" 
       x:Name="DGrid" 
       ItemsSource="{Binding Path=Elements[option]}"> 

     <DataGrid.Columns> 
      <DataGridTextColumn Binding="{Binding Path = Elements[bid].Value}" 
           Header="Bid" IsReadOnly="True"/> 
      <DataGridTextColumn Binding="{Binding Path=Elements[ask].Value}" 
           Header="Ask" IsReadOnly="True"/> 

     </DataGrid.Columns> 
    </DataGrid> 
    <Button x:Name="button2" Grid.Row="1" Click="button_Click"/> 

</Grid> 
</UserControl> 

CS:

private void button_Click(object sender, RoutedEventArgs e) 
    { 
     XElement xdoc = new XElement("root"); 
     YahooData data = new YahooData("AAPL");    
     IEnumerable<XElement> doc = data.Document; 
     xdoc.Add(doc); 
     DGrid.DataContext = xdoc; 
    } 
+1

你應該元素中使用索引。如: - Elements [bid] [1] .Value。 –

回答

1

你就要成功了,但一個小問題 - Binding for column will be a collection of XElements(因爲你綁定元素集合) 。你需要得到first index value,你會很開心。

這將工作 -

<DataGrid.Columns> 
    <DataGridTextColumn Binding="{Binding Path = Elements[bid][0].Value}" 
         Header="Bid" IsReadOnly="True"/> 
    <DataGridTextColumn Binding="{Binding Path=Elements[ask][0].Value}" 
         Header="Ask" IsReadOnly="True"/> 

</DataGrid.Columns> 
+1

修好了!謝謝!! – Wallace