Привязка данных TreeView к DataTable - PullRequest
0 голосов
/ 08 января 2010

Я новичок в WPF и буду очень признателен за помощь по проблеме, с которой я борюсь. Мне нужно связать TreeViewItem в WPF TreeView в меню основного приложения. Все, что мне нужно, это правильный синтаксис для привязки единственного набора данных к TreeViewItem (XAML и кодовый код), это то, что у меня есть до сих пор. Пожалуйста, предоставьте код с вашим предложением, ваша помощь приветствуется. Чтобы еще раз все прояснить, я просто пытаюсь связать ItemList TreeViewItem * ItemsSource. TreeView показывает 5 строк в таблице, но показывает System.Data.DataRow вместо реального значения, Ваша помощь оценена

1011 * 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 Ответ

1 голос
/ 08 января 2010

Я внес некоторые изменения в ваш xaml и CreateList, пожалуйста, проверьте, работает ли он для вас

xaml : я удалил 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);

надеюсь, это поможет, с уважением

...