2010-01-07 72 views
0

我是WPF的新手,非常感谢我遇到的难题。我需要在WPF TreeView的主应用菜单中绑定TreeViewItem。我需要的是将单个数据表绑定到TreeViewItem(XAML和代码隐藏)的正确语法,这是迄今为止我所拥有的。请提供您的建议代码,您的帮助表示赞赏。为了让事情再次澄清,我只是试图绑定ItemListTreeViewItemItemsSource。该TreeView显示在表中的5行,但它表明System.Data.DataRow,而不是真正的价值,你的帮助赞赏树形数据绑定到数据表

XAML

<Window x:Class="WPFToolkit.Window1" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:local="clr-namespace:WPFToolkit" 
     Title="Window1" Height="300" Width="300"> 
    <Window.Resources> 
    </Window.Resources> 
    <Grid> 
    <TreeView Name="SampleTree" Margin="-9,0,0,0"> 
     <TreeViewItem Header="Create List" MouseDoubleClick="CreateCodeset_Click" 
        IsEnabled="True"/> 
     <TreeViewItem Header="Search List" MouseDoubleClick="SearchCodeSet_Click"/> 
     <TreeViewItem Header="List Items" Margin="15,0,0,0"> 
     <TreeViewItem Name="ItemList" Header="Codeset 1" 
         Style="{StaticResource listMenuItem}"> 
     </TreeViewItem> 
     </TreeViewItem> 
    </TreeView> 
    </Grid> 
</Window> 

C#

public void CreateList() 
{ 
    DataTable tbl = new DataTable("Items"); 
    tbl.Columns.Add("Name"); 

    DataRow row = tbl.NewRow(); 
    row["Name"] = "Fruits"; 
    tbl.Rows.Add(row); 

    DataRow row2 = tbl.NewRow(); 
    row["Name"] = "Vegetables"; 
    tbl.Rows.Add(row2); 

    DataRow row3 = tbl.NewRow(); 
    row["Name"] = "Meats"; 
    tbl.Rows.Add(row3); 

    DataRow row4 = tbl.NewRow(); 
    row["Name"] = "Drinks"; 
    tbl.Rows.Add(row4); 

    DataRow row5 = tbl.NewRow(); 
    row["Name"] = "Bread"; 
    tbl.Rows.Add(row5); 

    //This is not working 
    ItemList.ItemsSource = tbl.Select(); 
} 

回答

1

我已经做了一些改动你的XAML和CreateList,请检查它是否适用于你

xaml:我已经REM ved Style =“..”并将ItemTemplate设置为窗口资源部分中定义的数据模板。 TextBlock的弯曲,以你的数据集的名称字段

<Window.Resources> 
    <DataTemplate x:Key="itemsTemplate"> 
     <StackPanel> 
      <TextBlock Text="{Binding Path=Name}"/> 
     </StackPanel> 
    </DataTemplate> 
</Window.Resources> 

<Grid> 
    <TreeView Height="277" HorizontalAlignment="Left" 
       Margin="64,24,0,0" Name="treeView1" 
       VerticalAlignment="Top" Width="268"> 
     <TreeViewItem Header="Create List" IsEnabled="True"/> 
     <TreeViewItem Header="Search List" /> 
     <TreeViewItem Header="List Items" Margin="15,0,0,0" IsExpanded="true"> 
      <TreeViewItem Name="ItemList" Header="Codeset 1" IsExpanded="true"        
          ItemTemplate="{StaticResource itemsTemplate}"/> 
     </TreeViewItem> 
    </TreeView> 
</Grid> 

CreateList:我已经改变ItemList.ItemsSource到DataView对象;您还将“名称”项分配给同一行对象,看起来像示例代码中的错误。

DataTable tbl = new DataTable("Items"); 
tbl.Columns.Add("Name"); 

DataRow row = tbl.NewRow(); 
row["Name"] = "Fruits"; 
tbl.Rows.Add(row); 

DataRow row2 = tbl.NewRow(); 
row2["Name"] = "Vegetables"; // original code has "row" here 
tbl.Rows.Add(row2); 

DataRow row3 = tbl.NewRow(); 
row3["Name"] = "Meats"; 
tbl.Rows.Add(row3); 

DataRow row4 = tbl.NewRow(); 
row4["Name"] = "Drinks"; 
tbl.Rows.Add(row4); 

DataRow row5 = tbl.NewRow(); 
row5["Name"] = "Bread"; 
tbl.Rows.Add(row5); 

//ItemList.ItemsSource = tbl.Select(); 
ItemList.ItemsSource = new DataView(tbl); 

希望这会有所帮助,至于