MasterGH Опубликовано 19 августа, 2011 Поделиться Опубликовано 19 августа, 2011 Слова для поисковиков : TreeView, IsSynchronizedCurrentItem, DataSet, TreeView1SelectedItemChanged, LINQ to XML, XmlDataProvider ...Эта статья не претендует на полноту.Всем известно что WPF поддерживает XmlDataProvider, а вот SIlverlight нет. В MSDN рекомендуется пользоваться LINQ to XML. Что собственно я и сделал в этом примере.Пример:http://mastergh.gamehacklab.ru/Код заммеля:<UserControl x:Class="SearchClientRC.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" xmlns:local="clr-namespace:SearchClientRC" mc:Ignorable="d" d:DesignHeight="577" d:DesignWidth="945" x:Name="Control" Background="Black" BorderBrush="Black"> <UserControl.Resources> <local:Cheats x:Key="CheatsDB"/> <CollectionViewSource x:Name="CollectionViewCheat" Source="{Binding Source={StaticResource CheatsDB}}" /> <local:DocumentLuaViewModel x:Key="LuaDB"/> <local:DocumentAAViewModel x:Key="AADB"/> <sdk:HierarchicalDataTemplate x:Key="ItemTemplate" ItemsSource="{Binding}" > <TextBlock Text="{Binding Title}" /> </sdk:HierarchicalDataTemplate> </UserControl.Resources> <Grid >... <Grid Grid.Row="2" HorizontalAlignment="Stretch" Margin="10,5,10,10" VerticalAlignment="Stretch"> <Grid.ColumnDefinitions> <ColumnDefinition Width="309" /> <ColumnDefinition Width="771*" /> </Grid.ColumnDefinitions> <sdk:GridSplitter Grid.Column="1" HorizontalAlignment="Left" Margin="2,0,0,0" VerticalAlignment="Stretch" Width="10" > <sdk:GridSplitter.Background> <LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5"> <GradientStop Color="#FFDEDEDE" Offset="1" /> <GradientStop Color="#FFF2F2F2" Offset="0.288" /> <GradientStop Color="#FFDEDEDE" Offset="0" /> <GradientStop Color="#FFEBEBEB" Offset="0.714" /> </LinearGradientBrush> </sdk:GridSplitter.Background> </sdk:GridSplitter> <RichTextBox Padding="10,10,0,0" IsReadOnly="True" Grid.Column="1" Margin="13,0,0,0" TextWrapping="Wrap" HorizontalScrollBarVisibility="Auto" HorizontalContentAlignment="Left" VerticalContentAlignment="Top" UseLayoutRounding="False"> <RichTextBox.Background > <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> <GradientStop Color="Black" Offset="0" /> <GradientStop Color="Black" Offset="1" /> <GradientStop Color="Transparent" Offset="0.983" /> <GradientStop Color="#29FCFCFC" Offset="0.014" /> </LinearGradientBrush> </RichTextBox.Background> <Paragraph> <Run Text="{Binding Path=SelectedItem.SubTitle, Mode=OneWay, ElementName=myTreeView2}"/> </Paragraph> </RichTextBox> <sdk:TreeView Name="myTreeView2" ItemsSource="{Binding}" ItemTemplate="{StaticResource ItemTemplate}" DataContext="{Binding Source={StaticResource AADB}}" /> </Grid>... </Grid></UserControl>Код C#: public class TreeItemModel : List<TreeItemModel> { public string Title { get; set; } public string SubTitle { get; set; } public TreeItemModel(string title, string subTitle) { Title = title; SubTitle = subTitle; } } public class DocumentViewModel: List<TreeItemModel> { private string _localDataBaseName = ""; private static string GetName(XElement xelement) { var xAttribute = xelement.Attribute("name"); if (xAttribute == null) throw new Exception("Не найден атрибут 'name'. Исправьте базу данных и перезапустите приложение."); return xAttribute.Value; } private static string GetComment(XElement xelement) { return xelement.Elements("Comment").Count() > 0 ? xelement.Elements("Comment").First().Value : ""; } // Текущий узел -> дочерние private static void CreateInheritItem(XElement xelement, TreeItemModel treeParentItemModel) { var currentTreeItemViewModel = new TreeItemModel(GetName(xelement), GetComment(xelement)); foreach (var subXElement in xelement.Elements("P")) CreateInheritItem(subXElement, currentTreeItemViewModel); treeParentItemModel.Add(currentTreeItemViewModel); } public DocumentViewModel(string localDataBaseName) { _localDataBaseName = localDataBaseName; var dbLua = XElement.Load(localDataBaseName); foreach (var subXElement in dbLua.Elements("P")) { var currentTreeItemViewModel = new TreeItemModel(GetName(subXElement), GetComment(subXElement)); foreach (var xsubXElement in subXElement.Elements("P")) CreateInheritItem(xsubXElement, currentTreeItemViewModel); Add(currentTreeItemViewModel); } } } public class DocumentLuaViewModel : DocumentViewModel { public DocumentLuaViewModel() : base("LuaHelpRU.xml") { } } public class DocumentAAViewModel : DocumentViewModel { public DocumentAAViewModel() : base("AAHelpRU.xml") { } } //--------------------------- Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения