MasterGH Опубликовано 15 августа, 2011 Поделиться Опубликовано 15 августа, 2011 Слова для поисковиков : TreeView, IsSynchronizedCurrentItem, DataSet, TreeView1SelectedItemChanged,реляционные данные...Если Вы начинающий разработчик WPF и не знаете, как связывать данные с TreeView как на рисунке выше, то я помогу Вам справиться с этой задачей. Решение этой задачи может показаться сложным Начинающим, но, тем не менее, я направлю на путь решения. Сначала я рассмотрю решение с XML данными, а реляционные данные оставлю на закуску.Задача: отображать данные узла в TreeView при выделении этого узла.1. XML данныеНачинающий разработчик привык к такому свойству как IsSynchronizedCurrentItem у различных контролов. Но у TreeView такое свойство отсутсвует. Почему оно отсутсвует Чёрт его знает. Это отсутсвие может обезкуражить, и спровоцировать нелучшие идеи решения данной задчи. Если Вы попытаетесь в посковике найти решение проблемы, то скорее всего вы ничего не найдете. Даже в MSDN я не нашёл конкретный пример.Для решения задачи Вам надо мыслить как заядлый WPF-щик. Боже упаси, Вам придумать идею с обработкой события TreeView1SelectedItemChanged() внутри которого был бы код синхронизации.Итак. Чтобы в правом поле ТекстБокса отображались данные xml нужно использовать следующую связку свойства-зависимости “Text”:<TextBox Name="textBoxShowComment" Text="{Binding ElementName=treeView1, Path=SelectedItem, Converter={StaticResource XmlElementConverter1}, Mode=OneWay}" />Суть в том, что вы привязываете Текст именно к элементу TreeView->SelectedItem, который был только что выделен. Поскольку Item это объект тип которого зависит от поставщика данных, то надо использовать преобразователь. В данном случае это XmlElementConverter1. [ValueConversion(typeof(XmlElement), typeof(string))] public class XmlElementConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { var element = value as XmlElement; return element != null ? element.FirstChild.InnerText : ""; } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {// напишите свой код записи в element.FirstChild.InnerText return null; } }Эта разметка позволит вам лучше соориентироваться. <Window x:Class="CELua_Support2.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="267" Width="637" WindowStartupLocation="CenterScreen" xmlns:my="clr-namespace:CELua_Support2"> <Window.Resources> <XmlDataProvider x:Key="myDB" XPath="LuaDataSet/P"> <x:XData xmlns=""> <LuaDataSet revision="r1004">x1 <P name="Don Hall">x2 <P name="Alice Ciccu">x3 <P name="David Pelton">x4 <P name="Vivian Atlas">Комментарии1</P> </P> <P name="Andy Pelton">Комментарии2</P> <P name="Andy Jacobs">Комментарии3</P> </P> <P name="Bill Malone">x5 <P name="Maurice Taylor">Комментарии4</P> <P name="Sunil Uppal">Комментарии5</P> <P name="Qiang Wang">Комментарии6</P> </P> </P> </LuaDataSet> </x:XData> </XmlDataProvider> <HierarchicalDataTemplate x:Key="ItemTemplate" ItemsSource="{Binding XPath=P}"> <TextBlock Text="{Binding XPath=@name}" ></TextBlock> </HierarchicalDataTemplate> <Style TargetType="TreeViewItem"> <Setter Property="IsExpanded" Value="True"/> </Style> <my:XmlElementConverter x:Key="XmlElementConverter1" /> </Window.Resources> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="244" /> <ColumnDefinition Width="279*" /> </Grid.ColumnDefinitions> <TreeView x:Name="treeView1" ItemsSource="{Binding Source={StaticResource myDB}}" ItemTemplate="{StaticResource ItemTemplate}" /> <TextBox Name="textBoxShowComment" TextWrapping="Wrap" Grid.Column="1" Margin="5,0,0,0" BorderBrush="#FF828790" SelectionBrush="#FF828790" Text="{Binding ElementName=treeView1, Path=SelectedItem, Converter={StaticResource XmlElementConverter1}, Mode=OneWay}" /> <GridSplitter Grid.Column="1" HorizontalAlignment="Left" Name="gridSplitter1" Width="5" /> </Grid></Window>2. Реляционные данныеПо реляционным данным почитайте тутор(Josh Smith).Напоминаю, что реляционные данные можно строить визуально в VisualStudio ипользуя таблицы и связи. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения