2014-09-29 32 views
1

我想使用xml文件中的數據填充下拉列表我確定我關閉了,因爲intellisense顯示的是XML文件中的數據,但是當我嘗試將其綁定到組合框我得到每個具有數據類型但不包含數據的條目。試圖從xml文件中填充winrt xaml中的組合框

public void PopPrograms() 
{ 
    //string picprgrmsXMLPath = Path.Combine(Package.Current.InstalledLocation.Path, "Assets/PicPrograms.xml"); 
    string picprgrmsXMLPath = Path.Combine(Windows.Storage.ApplicationData.Current.RoamingFolder.Path, "PicPrograms.xml"); 
    //string picprgrmsXMLPath = @"C:\temp\PicPrograms.xml"; 
    XDocument loadedData = XDocument.Load(picprgrmsXMLPath); 

    var data = from query in loadedData.Descendants("Node") 
    select new PicPrograms 
    { 
     //ProgramID = (string)query.Element("pID"), 
     ProgramName = (string)query.Element("pName"), 
    }; 
    cbProgram.ItemsSource = data; 

,現在這裏是我的XAML:

<ComboBox x:Name="cbProgram" ItemsSource="{Binding}" HorizontalAlignment="Left" 
      Margin="55,115,0,0" VerticalAlignment="Top" Width="215" Height="32" 
      SelectionChanged="cbProgram_SelectionChanged" Grid.RowSpan="2"/> 

我敢肯定,我失去了一些東西在這裏,但就是不知道它是什麼。

這裏是XML文檔的一個片段:

<Programs> 
    <Node> 
    <pID>9930FA1A-A59E-4F78-8AFF-2E07AD4C1CD8</pID> 
    <pName>Black and Gold</pName> 
    </Node> 
    <Node> 
    <pID>23B4263C-4BF2-4EC3-AD99-17BCD6301189</pID> 
    <pName>Darren Hawkins Pic Review</pName> 
    </Node> 

得到的組合框顯示了每個元素同樣的事情:

CameraCapture.CapturePhoto+PicProgram 
+0

請把你的'ToString'方法'PicProgram'和你的'ItemTemplate' – csharpwinphonexaml 2014-09-29 18:21:33

+0

對不起,不知道你在說什麼 – Lyle 2014-09-29 18:25:00

+0

你有'覆蓋字符串ToString()'在'PicProgram'嗎? – csharpwinphonexaml 2014-09-29 18:34:23

回答

1

爲了告訴ComboBox控制顯示什麼,你需要設置其DisplayMemberPathItemTemplate。 (它調用對象ToString()否則,默認情況下返回類型的名稱,你注意到了。)

如:

<ComboBox x:Name="cbProgram" DisplayMemberPath="ProgramName" ... 

或者:

<ComboBox x:Name="cbProgram" ...> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding ProgramName}" /> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox>