Skip to content

Instantly share code, notes, and snippets.

@davybrion
Created September 15, 2012 13:58
Show Gist options
  • Save davybrion/3728068 to your computer and use it in GitHub Desktop.
Save davybrion/3728068 to your computer and use it in GitHub Desktop.
code snippets for "MVP In Silverlight/WPF: Implementing The Overview UserControl" post, part III
public interface IUserGroupsView : IView
{
void ExpandTreeView();
void HideAddNewButton();
void SelectItemInTreeView(HierarchicalUserGroupBindingModel userGroupModel);
}
<MVP:View x:Class="SilverlightMVP.Client.Views.UserGroups"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls"
xmlns:Windows="clr-namespace:System.Windows;assembly=System.Windows.Controls"
xmlns:MVP="clr-namespace:SilverlightMVP.Client.Infrastructure.MVP">
<Grid Background="White">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Controls:TreeView x:Name="UserGroupsTreeView" ItemsSource="{Binding UserGroups}"
SelectedItemChanged="UserGroupsTreeView_SelectedItemChanged" Grid.Row="0" >
<Controls:TreeView.ItemTemplate>
<Windows:HierarchicalDataTemplate ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Path=Name}" />
</Windows:HierarchicalDataTemplate>
</Controls:TreeView.ItemTemplate>
</Controls:TreeView>
<Button x:Name="AddNewButton" Content="Create new usergroup" Click="AddNewButton_Click"
Margin="5" Grid.Row="1" />
</Grid>
</MVP:View>
public interface IUserGroupsView : IView
{
void ExpandTreeView();
void HideAddNewButton();
void SelectItemInTreeView(HierarchicalUserGroupBindingModel userGroupModel);
}
public partial class UserGroups : IUserGroupsView
{
private readonly UserGroupsPresenter presenter;
public UserGroups()
{
InitializeComponent();
presenter = CreateAndInitializePresenter<UserGroupsPresenter>();
}
public void SelectItemInTreeView(HierarchicalUserGroupBindingModel userGroupModel)
{
UserGroupsTreeView.SelectItem(userGroupModel);
}
public void ExpandTreeView()
{
for (int i = 0; i < UserGroupsTreeView.Items.Count; i++)
{
ExpandAllTreeViewItems((TreeViewItem)UserGroupsTreeView.ItemContainerGenerator.ContainerFromIndex(i));
}
}
private void ExpandAllTreeViewItems(TreeViewItem treeViewItem)
{
if (!treeViewItem.IsExpanded)
{
treeViewItem.IsExpanded = true;
treeViewItem.Dispatcher.BeginInvoke(() => ExpandAllTreeViewItems(treeViewItem));
}
else
{
for (int i = 0; i < treeViewItem.Items.Count; i++)
{
var child = (TreeViewItem)treeViewItem.ItemContainerGenerator.ContainerFromIndex(i);
ExpandAllTreeViewItems(child);
}
}
}
public void HideAddNewButton()
{
AddNewButton.Visibility = Visibility.Collapsed;
}
private void UserGroupsTreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
presenter.DealWithSelectedUserGroup((HierarchicalUserGroupBindingModel)e.NewValue);
}
private void AddNewButton_Click(object sender, RoutedEventArgs e)
{
presenter.PrepareUserGroupCreation();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment