2010-01-07 2 views
0

저는 WPF를 처음 사용하고있어서 어려움을 겪고있는 문제에 도움을 주시면 감사하겠습니다. 주 앱의 메뉴에서 WPF TreeViewTreeViewItem을 바인딩해야합니다. 필요한 것은 단일 데이터 테이블을 TreeViewItem (XAML 및 코드 숨김)에 바인드하는 올바른 구문입니다. 이것이 제가 지금까지 가지고있는 것입니다. 제안서에 코드를 입력하십시오. 도움을 받으실 수 있습니다. 다시 한 번 명확하게하기 위해 나는 단지 ItemListTreeViewItemItemsSource을 묶으려고합니다. 귀하가 DataTable에 대한 Treeview 데이터 바인딩

XAML

을 평가하는 데 도움이의 TreeView은 테이블의 5 개 행을 보여 주지만, 대신 실제 값의 System.Data.DataRow을 보여줍니다
<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> 

내가 일부 변경 한

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

C#을 xaml 및 CreateList가 작동하는지 pls 확인하십시오.

xaml : 저는 remo를했습니다. ved Style = ".."이고 ItemTemplate을 window resources 섹션에 정의 된 데이터 템플릿으로 설정합니다. 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 : 나는 DataView를 객체에 ItemList.ItemsSource를 변경했습니다; 같은 행 개체에 "이름"항목을 지정 했는데도 샘플 코드의 버그처럼 보입니다. 이 도움이

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

희망,

에 관하여
관련 문제