At BASTA Austria (http://www.basta-austria.at) I did a workshop about WPF and Prism. This is my slide deck. It summarizes the most important take-aways from the workshop. Additionally it contains sample code snippets.
CoFX is the framework behind time cockpit (http://www.timecockpit.com). Learn about the data model of CoFX and see how to use it to extend time cockpit.
Developing Android and iOS Apps With C#, .NET, Xamarin, Mono, and Windows AzureRainer Stropek
The Xamarin and Mono platforms enable C# developers to use their existing knowledge and experience to write apps für Android and iOS. At BASTA 2013 conference I did a 75 minutes session about that topic. During the session I showed a sample that used SQLite on the phone and Windows Azure Mobile Service as its backend in the cloud. This is the slidedeck I used for the session
Im zweiten Teil seiner OData Session zeigt Rainer Stropek, wie man eigene OData-Provider entwickelt. In einem durchgängigen Beispiel demonstriert er, wie man erst einen LINQ-Provider und darauf aufbauend einen OData-konformen REST Service erstellt und von verschiedenen Programmiersprachen und Tools darauf zugreift. In der Session werden Grundkenntnisse von OData und LINQ vorausgesetzt.
This presentation shows the feature updates from Scala 2.12 to 2.13.
The list of features is not comprehensive, but it is my personal selection of favorites.
I will focus on those which IMO impact/ease the programmers live most.
I will look at 5 feature areas: compiler, standard library, language changes,
Future and finally the most important change the redesigned collections library.
I will not only show the new features of 2.13. In many cases I will show how the
new features of 2.13 can be backported to 2.12 und be used in mostly the same way as in 2.13.
Finally I'll give some guide lines for the migration from 2.12 to 2.13 and for a cross version
project which compiles a code base with both compiler versions.
Presented at BJUG, 6/12/2012 by Roger Brinkley
This talk is on 55 new features in Java 7 you (probably) didn't hear about in an ignite format of one per minute. No stopping, no going back....Questions, sure but only if time remains (otherwise save for later).
SenchaCon 2016: Modernizing the Ext JS Class System - Don GriffinSencha
JavaScript is advancing and ES2015 (formerly ES6) is the foundation of its future. Sencha is committed to delivering cutting-edge technology for your applications, and supporting the evolution of JavaScript is a central part of that commitment. The expansive feature set of ES2015 formally enables coding paradigms: modules to better organize your code, classes to cleanly declare reusable units of functionality, and so much more. See how Ext JS is embracing these new language and toolset features, and how they will expand your development horizons.
CoFX is the framework behind time cockpit (http://www.timecockpit.com). Learn about the data model of CoFX and see how to use it to extend time cockpit.
Developing Android and iOS Apps With C#, .NET, Xamarin, Mono, and Windows AzureRainer Stropek
The Xamarin and Mono platforms enable C# developers to use their existing knowledge and experience to write apps für Android and iOS. At BASTA 2013 conference I did a 75 minutes session about that topic. During the session I showed a sample that used SQLite on the phone and Windows Azure Mobile Service as its backend in the cloud. This is the slidedeck I used for the session
Im zweiten Teil seiner OData Session zeigt Rainer Stropek, wie man eigene OData-Provider entwickelt. In einem durchgängigen Beispiel demonstriert er, wie man erst einen LINQ-Provider und darauf aufbauend einen OData-konformen REST Service erstellt und von verschiedenen Programmiersprachen und Tools darauf zugreift. In der Session werden Grundkenntnisse von OData und LINQ vorausgesetzt.
This presentation shows the feature updates from Scala 2.12 to 2.13.
The list of features is not comprehensive, but it is my personal selection of favorites.
I will focus on those which IMO impact/ease the programmers live most.
I will look at 5 feature areas: compiler, standard library, language changes,
Future and finally the most important change the redesigned collections library.
I will not only show the new features of 2.13. In many cases I will show how the
new features of 2.13 can be backported to 2.12 und be used in mostly the same way as in 2.13.
Finally I'll give some guide lines for the migration from 2.12 to 2.13 and for a cross version
project which compiles a code base with both compiler versions.
Presented at BJUG, 6/12/2012 by Roger Brinkley
This talk is on 55 new features in Java 7 you (probably) didn't hear about in an ignite format of one per minute. No stopping, no going back....Questions, sure but only if time remains (otherwise save for later).
SenchaCon 2016: Modernizing the Ext JS Class System - Don GriffinSencha
JavaScript is advancing and ES2015 (formerly ES6) is the foundation of its future. Sencha is committed to delivering cutting-edge technology for your applications, and supporting the evolution of JavaScript is a central part of that commitment. The expansive feature set of ES2015 formally enables coding paradigms: modules to better organize your code, classes to cleanly declare reusable units of functionality, and so much more. See how Ext JS is embracing these new language and toolset features, and how they will expand your development horizons.
How to build to do app using vue composition api and vuex 4 with typescriptKaty Slemon
In this tutorial, we will build a to-do app using Vue Composition API & Vuex 4 with Typescript. We will learn and explore Composition API & Options API as well
Spring Day | Spring and Scala | Eberhard WolffJAX London
2011-10-31 | 09:45 AM - 10:30 AM
Spring is widely used in the Java world - but does it make any sense to combine it with Scala? This talk gives an answer and shows how and why Spring is useful in the Scala world. All areas of Spring such as Dependency Injection, Aspect-Oriented Programming and the Portable Service Abstraction as well as Spring MVC are covered.
www.denizoguz.com-For an in company JDK 7 orientation I have prepared a presentation which summaries new features of JDK 7. I would like to make it public for everyone who needs it.
Modern Programming in Java 8 - Lambdas, Streams and Date Time APIGanesh Samarthyam
This presentation provides a comprehensive overview of modern programming in Java. It focuses only on Java 8 features: Lambdas, Streams and Date Time API. It also briefly covers refactoring legacy Java code to Java 8.
Java 9 introduces modules to the Java programming language and its runtime. Despite this feature being optional, due to the modularization of the standard library existing applications might behave differently when running on a version 9 JVM. Furthermore, because of changes in the runtime, existing libraries and frameworks might not yet correctly process your modularized code. As a result, updating to a Java 9 VM and taking Java 9 into brings its challanges.
This talk discusses the practical implications of module boundaries and analyzes new limitations Java 9 imposes on the reflection API. This talk explains how reflection is used in popular frameworks like Spring and Hibernate and explains why existing applications might break or change their behavior when facing modularized code. Finally, this talk showcases alternatives to now failing Java programming patterns and weights their robustness with regard to the Java releases 10 and upward.
The presenter is an active contributor to open source and helped to migrate many popular Java libraries to supporting Java 9. As a consequence, he as been working with Java 9 for almost two years.
I use this slide deck in C# trainings to cover P/Invoke. Sample code can be found at https://github.com/rstropek/Samples/tree/master/PInvoke For details see my blog at http://www.software-architects.at
Coding Like the Wind - Tips and Tricks for the Microsoft Visual Studio 2012 C...Rainer Stropek
Microsoft Visual Studio 2012 contains a bunch of productivity features for C# developers. Rainer Stropek, MVP for Windows Azure, summarizes his top tips for the new VS2012 C# IDE in this presentation
How to build to do app using vue composition api and vuex 4 with typescriptKaty Slemon
In this tutorial, we will build a to-do app using Vue Composition API & Vuex 4 with Typescript. We will learn and explore Composition API & Options API as well
Spring Day | Spring and Scala | Eberhard WolffJAX London
2011-10-31 | 09:45 AM - 10:30 AM
Spring is widely used in the Java world - but does it make any sense to combine it with Scala? This talk gives an answer and shows how and why Spring is useful in the Scala world. All areas of Spring such as Dependency Injection, Aspect-Oriented Programming and the Portable Service Abstraction as well as Spring MVC are covered.
www.denizoguz.com-For an in company JDK 7 orientation I have prepared a presentation which summaries new features of JDK 7. I would like to make it public for everyone who needs it.
Modern Programming in Java 8 - Lambdas, Streams and Date Time APIGanesh Samarthyam
This presentation provides a comprehensive overview of modern programming in Java. It focuses only on Java 8 features: Lambdas, Streams and Date Time API. It also briefly covers refactoring legacy Java code to Java 8.
Java 9 introduces modules to the Java programming language and its runtime. Despite this feature being optional, due to the modularization of the standard library existing applications might behave differently when running on a version 9 JVM. Furthermore, because of changes in the runtime, existing libraries and frameworks might not yet correctly process your modularized code. As a result, updating to a Java 9 VM and taking Java 9 into brings its challanges.
This talk discusses the practical implications of module boundaries and analyzes new limitations Java 9 imposes on the reflection API. This talk explains how reflection is used in popular frameworks like Spring and Hibernate and explains why existing applications might break or change their behavior when facing modularized code. Finally, this talk showcases alternatives to now failing Java programming patterns and weights their robustness with regard to the Java releases 10 and upward.
The presenter is an active contributor to open source and helped to migrate many popular Java libraries to supporting Java 9. As a consequence, he as been working with Java 9 for almost two years.
I use this slide deck in C# trainings to cover P/Invoke. Sample code can be found at https://github.com/rstropek/Samples/tree/master/PInvoke For details see my blog at http://www.software-architects.at
Coding Like the Wind - Tips and Tricks for the Microsoft Visual Studio 2012 C...Rainer Stropek
Microsoft Visual Studio 2012 contains a bunch of productivity features for C# developers. Rainer Stropek, MVP for Windows Azure, summarizes his top tips for the new VS2012 C# IDE in this presentation
Whats New in Visual Studio 2012 for C++ DevelopersRainer Stropek
For a Microsoft event we have been hired to do a full-day workshop about news in Visual Studio 2012 for C++ developers. My colleague Philipp Aumayr conducted the workshop. Here are the slides for his talk. More details including sample code can be found in our developer blog at http://www.software-architects.com
This is a slide deck I have created for a session I did during a Microsoft Executive Meeting in Dublin. It is an excerpt of my SaaS/Multi Tenancy workshop that I do regularly at various conferences.
Business Model Evolution - Why The Journey To SaaS Makes SenseRainer Stropek
SaaS is an important trend in the software industry. In this presentation Rainer Stropek from time cockpit (http://www.timecockpit.com) speaks about typical challenges that software vendors have to solve to successfully transfer from the classical licensing-based model to a SaaS strategy.
Note that the original slide deck contains quite a lot of animations. If you want to have the original PPTX file including all the animations, feel free to contact me via twitter (@rstropek).
I have created this slide deck originally for the dotnet Cologne conference in Mai 2012. It is not a marketing- or design-related session about metro-style apps. It concentrates on the basic technology of WinRT instead.
The session starts with describing the evolution from COM over .NET to WinRT. Based on this is shows WinRT in C++, .NET and JavaScript.
AngularJS has become a very popular web development framework. Now that Telerik made Kendo UI open source, this framework is a possible alternative for many web developers. Learn about the differences and similarities.
Ist Cloud Computing für Sie sinnvoll? Sollten Sie auf Platform-as-a-Service bei Ihrer Softwareentwicklung setzen? Entsteht durch Cloud Computing für Ihr Unternehmen ein Mehrwert?
Beim Einsatz einer Cloud-Plattform, wie z.B. Windows Azure, können sich Vorteile für Ihre Softwareentwicklung und Ihr Unternehmen ergeben. Es gibt verschiedene Einsatzszenarien, in denen Cloud Computing besonders geeignet ist. Die Wahl des Abstraktionsniveaus (SaaS, PaaS, IaaS) in Verbindung mit den richtigen Designentscheidungen sind richtungsweisend.
Die Projekte time cockpit und TFM stellen exemplarisch die Unterschiede im Softwareentwicklungs- und Betriebsprozess bei SaaS Lösungen in der Cloud im Vergleich zur klassischen Softwareentwicklung für den Vorortbetrieb dar. Die beiden Produkte waren zwei der ersten Lösungen aus dem deutschsprachigen Raum, die von Grund auf für SaaS und Cloud konzipiert wurden.
Sencha ExtJs Learning Part 2 - MVC And MVVM Architecture in ExtJs [ENGLISH]Irfan Maulana
This is my second presentation for ExtJs Private Learning.
Please see my first presentation here :
http://www.slideshare.net/IrfanMaulana21/sencha-ext-js-overview-part-1-layout-and-container-in-extjs
This talk represents the combined experience from several web development teams who have been using Symfony2 since months already to create high profile production applications. The aim is to give the audience real world advice on how to best leverage Symfony2, the current rough spots and how to work around them. Aside from covering how to implement functionality in Symfony2, this talk will also cover topics such as how to best integrate 3rd party bundles and where to find them as well as how to deploy the code and integrate into the entire server setup.
The Meteor framework is a rising star. Other frameworks focus on separation of concerns or data binding or look and feel, but rarely put all the pieces together like Meteor does. Meteor is a full-stack isomorphic JavaScript framework for writing web and mobile apps that share code with the server and use MongoDB. It supports live updates and hot deploys, integrates with Cordova, AngularJS and other frameworks and tools, and has a unified package system for server and client packages. It also has a single tool that does everything and simplifies the everyday workflow: builds, cloud deployments, minification, managing target platforms and Meteor packages, and all the rest. In this session, you will learn about Meteor and see it in action.
Slides from the talk, "From Zero to Cloud in 12 Easy Factors", presented by Jatin Naik and Ed King at CF Summit 2018.
https://www.youtube.com/watch?v=3ziP2wIbNXo
Slides of a talk of a seminars series I gave at WebRatio in January 2014.
I implemented many best practices and advices in this presentation in a generic app template available here: https://github.com/iivanoo/cordovaboilerplate
Google App Engine has become a powerful PaaS provider in last couple of years. With Java support enabled, its scope has further increased. This session presents the options we have in terms of testing on Google App Engine. Following is an overview of the proposed agenda:
Running Test suites of Applications not built for Google App Engine
An over-view of Google Cloud Cover
Advantages & Limitations of Cloud Cover
Integration of Existing Test Suites in Google Cloud Cover
Local Testing of Applications built for Google App Engine
DataStore Testing
Memcache Testing
Task-Queue Testing
Authentication API Testing
An interactive Liferay (DXP) 7 Tech Meet up was codified by Azilen Technologies on 18th March, 2017 at Ahmedabad Management Association.
Those who have missed the direct confrontation can explore few of the knowledge elements here in the Presentation.
Essentials of Automations: Optimizing FME Workflows with ParametersSafe Software
Are you looking to streamline your workflows and boost your projects’ efficiency? Do you find yourself searching for ways to add flexibility and control over your FME workflows? If so, you’re in the right place.
Join us for an insightful dive into the world of FME parameters, a critical element in optimizing workflow efficiency. This webinar marks the beginning of our three-part “Essentials of Automation” series. This first webinar is designed to equip you with the knowledge and skills to utilize parameters effectively: enhancing the flexibility, maintainability, and user control of your FME projects.
Here’s what you’ll gain:
- Essentials of FME Parameters: Understand the pivotal role of parameters, including Reader/Writer, Transformer, User, and FME Flow categories. Discover how they are the key to unlocking automation and optimization within your workflows.
- Practical Applications in FME Form: Delve into key user parameter types including choice, connections, and file URLs. Allow users to control how a workflow runs, making your workflows more reusable. Learn to import values and deliver the best user experience for your workflows while enhancing accuracy.
- Optimization Strategies in FME Flow: Explore the creation and strategic deployment of parameters in FME Flow, including the use of deployment and geometry parameters, to maximize workflow efficiency.
- Pro Tips for Success: Gain insights on parameterizing connections and leveraging new features like Conditional Visibility for clarity and simplicity.
We’ll wrap up with a glimpse into future webinars, followed by a Q&A session to address your specific questions surrounding this topic.
Don’t miss this opportunity to elevate your FME expertise and drive your projects to new heights of efficiency.
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Jeffrey Haguewood
Sidekick Solutions uses Bonterra Impact Management (fka Social Solutions Apricot) and automation solutions to integrate data for business workflows.
We believe integration and automation are essential to user experience and the promise of efficient work through technology. Automation is the critical ingredient to realizing that full vision. We develop integration products and services for Bonterra Case Management software to support the deployment of automations for a variety of use cases.
This video focuses on the notifications, alerts, and approval requests using Slack for Bonterra Impact Management. The solutions covered in this webinar can also be deployed for Microsoft Teams.
Interested in deploying notification automations for Bonterra Impact Management? Contact us at sales@sidekicksolutionsllc.com to discuss next steps.
"Impact of front-end architecture on development cost", Viktor TurskyiFwdays
I have heard many times that architecture is not important for the front-end. Also, many times I have seen how developers implement features on the front-end just following the standard rules for a framework and think that this is enough to successfully launch the project, and then the project fails. How to prevent this and what approach to choose? I have launched dozens of complex projects and during the talk we will analyze which approaches have worked for me and which have not.
Connector Corner: Automate dynamic content and events by pushing a buttonDianaGray10
Here is something new! In our next Connector Corner webinar, we will demonstrate how you can use a single workflow to:
Create a campaign using Mailchimp with merge tags/fields
Send an interactive Slack channel message (using buttons)
Have the message received by managers and peers along with a test email for review
But there’s more:
In a second workflow supporting the same use case, you’ll see:
Your campaign sent to target colleagues for approval
If the “Approve” button is clicked, a Jira/Zendesk ticket is created for the marketing design team
But—if the “Reject” button is pushed, colleagues will be alerted via Slack message
Join us to learn more about this new, human-in-the-loop capability, brought to you by Integration Service connectors.
And...
Speakers:
Akshay Agnihotri, Product Manager
Charlie Greenberg, Host
UiPath Test Automation using UiPath Test Suite series, part 3DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 3. In this session, we will cover desktop automation along with UI automation.
Topics covered:
UI automation Introduction,
UI automation Sample
Desktop automation flow
Pradeep Chinnala, Senior Consultant Automation Developer @WonderBotz and UiPath MVP
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...DanBrown980551
Do you want to learn how to model and simulate an electrical network from scratch in under an hour?
Then welcome to this PowSyBl workshop, hosted by Rte, the French Transmission System Operator (TSO)!
During the webinar, you will discover the PowSyBl ecosystem as well as handle and study an electrical network through an interactive Python notebook.
PowSyBl is an open source project hosted by LF Energy, which offers a comprehensive set of features for electrical grid modelling and simulation. Among other advanced features, PowSyBl provides:
- A fully editable and extendable library for grid component modelling;
- Visualization tools to display your network;
- Grid simulation tools, such as power flows, security analyses (with or without remedial actions) and sensitivity analyses;
The framework is mostly written in Java, with a Python binding so that Python developers can access PowSyBl functionalities as well.
What you will learn during the webinar:
- For beginners: discover PowSyBl's functionalities through a quick general presentation and the notebook, without needing any expert coding skills;
- For advanced developers: master the skills to efficiently apply PowSyBl functionalities to your real-world scenarios.
Let's dive deeper into the world of ODC! Ricardo Alves (OutSystems) will join us to tell all about the new Data Fabric. After that, Sezen de Bruijn (OutSystems) will get into the details on how to best design a sturdy architecture within ODC.
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Tobias Schneck
As AI technology is pushing into IT I was wondering myself, as an “infrastructure container kubernetes guy”, how get this fancy AI technology get managed from an infrastructure operational view? Is it possible to apply our lovely cloud native principals as well? What benefit’s both technologies could bring to each other?
Let me take this questions and provide you a short journey through existing deployment models and use cases for AI software. On practical examples, we discuss what cloud/on-premise strategy we may need for applying it to our own infrastructure to get it to work from an enterprise perspective. I want to give an overview about infrastructure requirements and technologies, what could be beneficial or limiting your AI use cases in an enterprise environment. An interactive Demo will give you some insides, what approaches I got already working for real.
GraphRAG is All You need? LLM & Knowledge GraphGuy Korland
Guy Korland, CEO and Co-founder of FalkorDB, will review two articles on the integration of language models with knowledge graphs.
1. Unifying Large Language Models and Knowledge Graphs: A Roadmap.
https://arxiv.org/abs/2306.08302
2. Microsoft Research's GraphRAG paper and a review paper on various uses of knowledge graphs:
https://www.microsoft.com/en-us/research/blog/graphrag-unlocking-llm-discovery-on-narrative-private-data/
Key Trends Shaping the Future of Infrastructure.pdfCheryl Hung
Keynote at DIGIT West Expo, Glasgow on 29 May 2024.
Cheryl Hung, ochery.com
Sr Director, Infrastructure Ecosystem, Arm.
The key trends across hardware, cloud and open-source; exploring how these areas are likely to mature and develop over the short and long-term, and then considering how organisations can position themselves to adapt and thrive.
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualityInflectra
In this insightful webinar, Inflectra explores how artificial intelligence (AI) is transforming software development and testing. Discover how AI-powered tools are revolutionizing every stage of the software development lifecycle (SDLC), from design and prototyping to testing, deployment, and monitoring.
Learn about:
• The Future of Testing: How AI is shifting testing towards verification, analysis, and higher-level skills, while reducing repetitive tasks.
• Test Automation: How AI-powered test case generation, optimization, and self-healing tests are making testing more efficient and effective.
• Visual Testing: Explore the emerging capabilities of AI in visual testing and how it's set to revolutionize UI verification.
• Inflectra's AI Solutions: See demonstrations of Inflectra's cutting-edge AI tools like the ChatGPT plugin and Azure Open AI platform, designed to streamline your testing process.
Whether you're a developer, tester, or QA professional, this webinar will give you valuable insights into how AI is shaping the future of software delivery.
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...James Anderson
Effective Application Security in Software Delivery lifecycle using Deployment Firewall and DBOM
The modern software delivery process (or the CI/CD process) includes many tools, distributed teams, open-source code, and cloud platforms. Constant focus on speed to release software to market, along with the traditional slow and manual security checks has caused gaps in continuous security as an important piece in the software supply chain. Today organizations feel more susceptible to external and internal cyber threats due to the vast attack surface in their applications supply chain and the lack of end-to-end governance and risk management.
The software team must secure its software delivery process to avoid vulnerability and security breaches. This needs to be achieved with existing tool chains and without extensive rework of the delivery processes. This talk will present strategies and techniques for providing visibility into the true risk of the existing vulnerabilities, preventing the introduction of security issues in the software, resolving vulnerabilities in production environments quickly, and capturing the deployment bill of materials (DBOM).
Speakers:
Bob Boule
Robert Boule is a technology enthusiast with PASSION for technology and making things work along with a knack for helping others understand how things work. He comes with around 20 years of solution engineering experience in application security, software continuous delivery, and SaaS platforms. He is known for his dynamic presentations in CI/CD and application security integrated in software delivery lifecycle.
Gopinath Rebala
Gopinath Rebala is the CTO of OpsMx, where he has overall responsibility for the machine learning and data processing architectures for Secure Software Delivery. Gopi also has a strong connection with our customers, leading design and architecture for strategic implementations. Gopi is a frequent speaker and well-known leader in continuous delivery and integrating security into software delivery.
The Art of the Pitch: WordPress Relationships and SalesLaura Byrne
Clients don’t know what they don’t know. What web solutions are right for them? How does WordPress come into the picture? How do you make sure you understand scope and timeline? What do you do if sometime changes?
All these questions and more will be explored as we talk about matching clients’ needs with what your agency offers without pulling teeth or pulling your hair out. Practical tips, and strategies for successful relationship building that leads to closing the deal.
DevOps and Testing slides at DASA ConnectKari Kakkonen
My and Rik Marselis slides at 30.5.2024 DASA Connect conference. We discuss about what is testing, then what is agile testing and finally what is Testing in DevOps. Finally we had lovely workshop with the participants trying to find out different ways to think about quality and testing in different parts of the DevOps infinity loop.
10. Setup Dependency Injection (MEF)
• Optional
– Override CreateContainer and ConfigureContainer
– Make sure to call base class' implementation to get standard
services
protected override void ConfigureContainer()
{
base.ConfigureContainer();
// Publish container using MEF
this.Container.ComposeExportedValue<CompositionContainer>(this.Container);
}
• Override ConfigureAggregateCatalog
– Example:
protected override void ConfigureAggregateCatalog()
{
base.ConfigureAggregateCatalog();
this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(Shell).Assembly));
}
11. Create Shell (MEF)
• Create and initialize the shell
protected override DependencyObject CreateShell()
{
return this.Container.GetExportedValue<Shell>();
}
protected override void InitializeShell()
{
Application.Current.MainWindow = this.Shell as Window;
Application.Current.MainWindow.Show();
}
12. Sample: Bootstrapper
using Microsoft.Practices.Prism.MefExtensions;
using System.ComponentModel.Composition;
using System.ComponentModel.Composition.Hosting;
using System.IO;
using System.Reflection;
using System.Windows;
namespace Prism41Sample.UI
{
public class Bootstrapper : MefBootstrapper
{
/// <summary>
/// Sets up MEF catalogs
/// </summary>
protected override void ConfigureAggregateCatalog()
{
base.ConfigureAggregateCatalog();
var executingAssembly = Assembly.GetExecutingAssembly();
// Use current assembly when looking for MEF exports
this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(executingAssembly));
// Look into "Modules" directory to dynamically load additional exports
this.AggregateCatalog.Catalogs.Add(new DirectoryCatalog(
Path.Combine(Path.GetDirectoryName(executingAssembly.Location),
"RuntimeModules")));
}
13. Sample: Bootstrapper
/// <summary>
/// Exports MEF container in service locator
/// </summary>
protected override CompositionContainer CreateContainer()
{
var container = base.CreateContainer();
container.ComposeExportedValue(container);
return container;
}
protected override DependencyObject CreateShell()
{
// Create a new instance of the applications "MainWindow"
return this.Container.GetExportedValue<Window>("MainWindow");
}
/// <summary>
/// Makes shell the main window of the application.
/// </summary>
protected override void InitializeShell()
{
base.InitializeShell();
Application.Current.MainWindow = this.Shell as Window;
Application.Current.MainWindow.Show();
}
}
}
14. Sample: Bootstrapper
using Prism41Sample.UI.ViewModel;
using System.ComponentModel.Composition;
using System.Windows;
namespace Prism41Sample.UI.View
{
[Export("MainWindow", typeof(Window))]
public partial class MainWindow : Window
{
[ImportingConstructor]
public MainWindow(MainWindowViewModel viewModel)
{
InitializeComponent();
this.DataContext = viewModel;
}
}
}
16. Module Creation (1/2)
• Implement IModule
• Register named modules in XAML, app.config, or
code (see above)
• Declarative metadata attributes for modules
[ModuleExport(typeof(DataManagementModule), InitializationMode = InitializationMode.WhenAvailable)]
public class DataManagementModule : IModule
{
public void Initialize()
{
[…]
}
[…]
}
• Dependency management (incl. cycle detection)
[ModuleExport(typeof(ModuleA), DependsOnModuleNames = new string[] { "ModuleD" })]
public class ModuleA : IModule
{
[…]
}
17. Module Creation (2/2)
• Load modules from directory with
DirectoryModuleCatalog
protected override IModuleCatalog CreateModuleCatalog()
{
return new DirectoryModuleCatalog() {ModulePath = @".Modules"};
}
• Load modules from directory with MEF
protected override void ConfigureAggregateCatalog()
{
base.ConfigureAggregateCatalog();
DirectoryCatalog catalog = new DirectoryCatalog("DirectoryModules");
this.AggregateCatalog.Catalogs.Add(catalog);
}
18. Sample: Repository Module
using Microsoft.Practices.Prism.MefExtensions.Modularity;
using Microsoft.Practices.Prism.Modularity;
using Microsoft.Practices.ServiceLocation;
using Prism41Sample.Infrastructure;
using System.ComponentModel.Composition;
using System.ComponentModel.Composition.Hosting;
namespace Prism41Sample.Repository
{
[ModuleExport("RepositoryModule", typeof(RepositoryModule))]
public class RepositoryModule : IModule
{
[Import]
private IServiceLocator serviceLocator = null;
public void Initialize()
{
// Publish repository service using MEF
var container = this.serviceLocator.GetInstance<CompositionContainer>();
container.ComposeExportedValue<RepositoryBase>(new CustomerRepository());
}
}
}
21. Regions and Views
Region Adapters
• ContentControlRegionAdapter
• SelectorRegionAdapter
– E.g. TabControl
• ItemsControlRegionAdapter
– E.g. ListBox
22. Defining Regions
• In XAML
<UserControl […]
xmlns:prism="http://www.codeplex.com/prism">
[…]
<Controls:AnimatedTabControl
x:Name="PositionBuySellTab"
prism:RegionManager.RegionName="{x:Static inf:RegionNames.MainRegion}"/>
[…]
</UserControl>
• In Code
IRegionManager regionManager = ServiceLocator.Current.GetInstance<IRegionManager>();
RegionManager.SetRegionManager(this.ActionContent, regionManager);
RegionManager.SetRegionName(this.ActionContent, "ActionRegion");
23. Defining Regions
• In XAML
<UserControl […]
xmlns:prism="http://www.codeplex.com/prism">
[…]
<Controls:AnimatedTabControl
x:Name="PositionBuySellTab"
prism:RegionManager.RegionName="{x:Static inf:RegionNames.MainRegion}"/>
[…]
</UserControl>
• In Code
IRegionManager regionManager = ServiceLocator.Current.GetInstance<IRegionManager>();
RegionManager.SetRegionManager(this.ActionContent, regionManager);
RegionManager.SetRegionName(this.ActionContent, "ActionRegion");
24. Loading Content Into Regions
// View discovery using composition container
this.regionManager.RegisterViewWithRegion("MainRegion", typeof(EmployeeView));
// …or delegate
this.regionManager.RegisterViewWithRegion("MainRegion", () => this.container.Resolve<EmployeeView>());
// Add view in code
IRegion region = regionManager.Regions["MainRegion"];
var ordersView = container.Resolve<OrdersView>();
region.Add(ordersView, "OrdersView");
25. Tips For Views and Regions
• Ordering of views in a region
[Export]
[ViewSortHint("01")]
public partial class EmailNavigationItemView
[Export]
[ViewSortHint("02")]
public partial class CalendarNavigationItemView
• Sharing data between regions
– Attached property RegionContext
<TabControl AutomationProperties.AutomationId="DetailsTabControl"
cal:RegionManager.RegionName="{x:Static local:RegionNames.TabRegion}"
cal:RegionManager.RegionContext="{Binding Path=SelectedEmployee.EmployeeId}"
...>
// Read value of RegionContext
private void GetRegionContext()
{
this.Model.EmployeeId = (int)RegionContext.GetObservableContext(this).Value;
}
31. Sample: Event Aggregator
using Microsoft.Practices.Prism.Events;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Prism41Sample.CustomerMaintenance
{
public class ActivateCustomerEvent : CompositePresentationEvent<int>
{
}
}
33. Navigation
• Basic navigation
IRegion mainRegion = ...;
mainRegion.RequestNavigate(new Uri("InboxView", UriKind.Relative));
// or
IRegionManager regionManager = ...;
regionManager.RequestNavigate("MainRegion",
new Uri("InboxView", UriKind.Relative));
• Prerequisite (for MEF): Export of the view
[Export("InboxView")]
public partial class InboxView : UserControl
• Parameters for navigation
Employee employee = Employees.CurrentItem as Employee;
if (employee != null)
{
UriQuery query = new UriQuery();
query.Add("ID", employee.Id);
_regionManager.RequestNavigate(RegionNames.TabRegion,
new Uri("EmployeeDetailsView" + query.ToString(), UriKind.Relative));
}
34. Sample: Event Aggregator
[Export]
public class MainWindowViewModel : NotificationObject
{
private IEventAggregator eventAggregator = null;
[Import]
private IRegionManager regionManager = null;
[ImportingConstructor]
public MainWindowViewModel(IEventAggregator eventAggregator)
{
this.eventAggregator = eventAggregator;
this.eventAggregator.GetEvent<ActivateCustomerEvent>().Subscribe(this.OnActivateCustomer);
}
#region Main window controller
// You should implement the controller in a separate class if navigation is more complex.
private void OnActivateCustomer(int customerNumber)
{
var q = new UriQuery();
q.Add("CustomerNumber", customerNumber.ToString());
this.regionManager.RequestNavigate(
RegionAndModuleStringConstants.DetailRegionName,
new Uri("CustomerDetail" + q.ToString(), UriKind.Relative));
}
#endregion
36. Command Objects
• Implement ICommand yourself
• Use Prism's DelegateCommand<T>
public class DelegateCommand<T> : DelegateCommandBase
{
public DelegateCommand(
Action<T> executeMethod,
Func<T,bool> canExecuteMethod )
: base((o) => executeMethod((T)o), (o) => canExecuteMethod((T)o))
{
...
}
}
37. Sample: Delegate Command
public class MainWindowViewModel : NotificationObject
{
[ImportingConstructor]
public MainWindowViewModel(IEventAggregator eventAggregator)
{
this.CloseAllTabsCommand = new DelegateCommand(this.OnCloseAllTabs);
…
}
public ICommand CloseAllTabsCommand { get; private set; }
private void OnCloseAllTabs()
{
var detailRegion = this.regionManager.Regions[
RegionAndModuleStringConstants.DetailRegionName];
foreach (var view in detailRegion.Views)
{
// if the view implements IDisposable, call Dispose on it
var disposableView = view as IDisposable;
if (disposableView != null)
{
disposableView.Dispose();
}
detailRegion.Remove(view);
}
}
…
}
38. Command Objects With
Interaction Triggers
• Use commands with controls that does not support commands out of
the box
• Defined in Expression Blend
– Tip: Reference assemblies come with Prism
• Example:
<UserControl […]
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions">
[…]
<TextBlock Margin="5" Text="Hello World!">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseLeftButtonDown">
<i:InvokeCommandAction Command="{Binding Path=MyCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</TextBlock>
[…]
</UserControl>
• Use CallMethodAction to call methods without ICommand
– No support for parameters
40. Composite Commands (2/2)
• Implement IActiveAware on View or ViewModel class
• Implement IActiveAware on your commands
– DelegateCommand and CompositeCommand already implement
IActiveAware
• When View/ViewModel becomes inactive, deactivate child commands
• Specify true in monitorCommandActivity of constructor of
CompositeCommand
41. Interaction Services (WPF)
• ViewModel communicates with View using an
interaction service
var result =
interactionService.ShowMessageBox(
"Are you sure you want to cancel this operation?",
"Confirm",
MessageBoxButton.OK );
if (result == MessageBoxResult.Yes)
{
CancelRequest();
}
• Note: Silverlight not covered here
42. Sample: Composite Commands
namespace Prism41Sample.UI.ViewModel
{
[Export(typeof(IGlobalCommands))]
[PartCreationPolicy(CreationPolicy.Shared)]
public class GlobalCommands : IGlobalCommands
{
public GlobalCommands()
{
this.SaveAllCommand = new CompositeCommand();
this.PrintActiveItem = new CompositeCommand(true);
}
public CompositeCommand SaveAllCommand { get; private set; }
public CompositeCommand PrintActiveItem { get; private set; }
43. Sample: Composite Commands
#region IGlobalCommands implementation
public void RegisterSaveAllCommand(ICommand subCommand)
{
this.SaveAllCommand.RegisterCommand(subCommand);
}
public void RegisterPrintActiveItemCommand(ICommand subCommand)
{
this.PrintActiveItem.RegisterCommand(subCommand);
}
public void UnregisterSaveAllCommand(ICommand subCommand)
{
this.SaveAllCommand.UnregisterCommand(subCommand);
}
public void UnregisterPrintActiveItemCommand(
ICommand subCommand)
{
this.PrintActiveItem.UnregisterCommand(subCommand);
}
#endregion
}
}
49. Q&A
Thank you for your attention!
Rainer Stropek
software architects
rainer@timecockpit.com
http://www.timecockpit.com
50. is the leading time tracking solution for knowledge
workers. Graphical time tracking calendar, automatic tracking of
your work using signal trackers, high level of extensibility and
customizability, full support to work offline, and SaaS
deployment model make it the optimal choice especially in the
IT consulting business.
Try for free and without any risk. You can get your
trial account at http://www.timecockpit.com. After the trial
period you can use for only 0,20€ per user and
month without a minimal subscription time and without a
minimal number of users.
51. ist die führende Projektzeiterfassung für
Knowledge Worker. Grafischer Zeitbuchungskalender,
automatische Tätigkeitsaufzeichnung über Signal Tracker,
umfassende Erweiterbarkeit und Anpassbarkeit, volle
Offlinefähigkeit und einfachste Verwendung durch SaaS machen
es zur Optimalen Lösung auch speziell im IT-Umfeld.
Probieren Sie kostenlos und ohne Risko einfach
aus. Einen Testzugang erhalten Sie unter http://www.timecockpit.com.
Danach nutzen Sie um nur 0,20€ pro Benutzer und
Tag ohne Mindestdauer und ohne Mindestbenutzeranzahl.