MasterGH

Silverlight- приложение.

1 сообщение в этой теме

Слова для поисковиков : TreeView, IsSynchronizedCurrentItem, DataSet, TreeView1SelectedItemChanged, LINQ to XML, XmlDataProvider ...

Эта статья не претендует на полноту.

Всем известно что WPF поддерживает XmlDataProvider, а вот SIlverlight нет. В MSDN рекомендуется пользоваться LINQ to XML. Что собственно я и сделал в этом примере.

Пример:

http://mastergh.gamehacklab.ru/

post-3-1313738935,81_thumb.png

post-3-1313738936,42_thumb.png

Код заммеля:


<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") { }
}
    //---------------------------

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас