Skip to content

Instantly share code, notes, and snippets.

@davybrion
Created September 15, 2012 13:55
Show Gist options
  • Save davybrion/3728058 to your computer and use it in GitHub Desktop.
Save davybrion/3728058 to your computer and use it in GitHub Desktop.
code snippets for "MVP In Silverlight/WPF: Implementing The Overview UserControl" post, part II
public interface IUserGroupsView : IView
{
}
public override void Initialize()
{
var requestDispatcher = RequestDispatcherFactory.CreateAsyncRequestDispatcher();
requestDispatcher.Add(new CheckPermissionsRequest { PermissionsToCheck = new[] { Permissions.CreateUserGroup } });
requestDispatcher.Add(new GetAllUserGroupsRequest());
requestDispatcher.ProcessRequests(ResponsesReceived, PublishRemoteException);
}
private void ResponsesReceived(ReceivedResponses receivedResponses)
{
if (receivedResponses.HasResponse<GetAllUserGroupsResponse>())
{
BindingModel.PopulateFrom(receivedResponses.Get<GetAllUserGroupsResponse>().UserGroups);
View.ExpandTreeView();
}
if (receivedResponses.HasResponse<CheckPermissionsResponse>() &&
!receivedResponses.Get<CheckPermissionsResponse>().AuthorizationResults[Permissions.CreateUserGroup])
{
View.HideAddNewButton();
}
}
public interface IUserGroupsView : IView
{
void ExpandTreeView();
void HideAddNewButton();
}
public void DealWithSelectedUserGroup(HierarchicalUserGroupBindingModel selectedUserGroup)
{
EventAggregator.Publish(new UserGroupSelectedEvent(selectedUserGroup.Id));
}
public void PrepareUserGroupCreation()
{
EventAggregator.Publish(new UserGroupNeedsToBeCreatedEvent());
}
public class UserGroupChangedEvent : Event
{
public Guid Id { get; set; }
public string Name { get; set; }
public Guid? ParentId { get; set; }
public bool IsNew { get; set; }
}
public class UserGroupDeletedEvent : Event
{
public UserGroupDeletedEvent(Guid userGroupId)
{
UserGroupId = userGroupId;
}
public Guid UserGroupId { get; private set; }
}
public class UserGroupsPresenter : Presenter<IUserGroupsView, UserGroupsBindingModel>,
IListenTo<UserGroupChangedEvent>, IListenTo<UserGroupDeletedEvent>
EventAggregator.Subscribe(this);
public void Handle(UserGroupChangedEvent receivedEvent)
{
if (receivedEvent.IsNew)
{
View.SelectItemInTreeView(BindingModel.AddUserGroup(receivedEvent.Id, receivedEvent.Name, receivedEvent.ParentId));
}
else
{
BindingModel.UpdateUserGroup(receivedEvent.Id, receivedEvent.Name, receivedEvent.ParentId);
}
}
public void Handle(UserGroupDeletedEvent receivedEvent)
{
BindingModel.RemoveUserGroup(receivedEvent.UserGroupId);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment