For all of you here it is
Tuesday, November 29, 2011
Tuesday, September 13, 2011
Vote for Your Favourite Session to be Included in TechDays 2011
WOW! That’s all I can say to the response we received to our open call for sessions for TechDays 2011! We had almost 60 individuals submit close to 130 sessions to be delivered at TechDays 2011 in Toronto, Vancouver and Montreal. This made the task of narrowing it down for a short list for your votes challenging to say the least but we were able to make it happen. Now it’s your turn!
Today we have made all of the sessions on the short list available for you to cast your vote and tell us the kind of content you want delivered at TechDays 2011 that would help you grow in your career and help your organization grow their IT infrastructure and applications.
To cast your vote for the sessions you want to see at TechDays 2011, go to http://bit.ly/tdcan2011vote and make your selections. Voting is open until 11:59pm Eastern Time on Friday, September 16th so cast your votes now. Just like in all those reality shows featuring great talent, you need to vote for the sessions and individuals who proposed them if you want to see them at TechDays 2011 so don’t wait – VOTE NOW!!
We will be announcing the sessions selected from the audience vote next week.
Monday, March 28, 2011
How to Databind to ListBox’s SelectedItems property (Silverlight)
It’s been a while since the last time I published some useful code sample. I apologize!
Today I found what I qualify as a bug in Silverlight 4.0. Those who know me are aware that I’m working on a big Silverlight project for about a year now. As you also know I’m a big fan of patterns and for Silverlight, the obvious one is MVVM.
Every pattern has its own standard and often its own framework. With MVVM the omnipresent framework feature is Databinding. In XAML, Databinding is really powerful. Of course Silverlight doesn’t have all the power WPF has but almost. I’m already used to deal with the limitation of Silverlight binding and the lack of Markup extension for example. But today I it a wall with something I didn’t expect, data binding to the SelectedItems property of a ListBox.
If you look closely at ListBox’s properties you will find that almost all of them are DependencyProperty except for SelectedItems (don’t miss the “s”). SelectedItem (without an “s”) is a ok but not SelectedItems. Why? I suppose its was forgotten.
How to fix that? I found many complex implementation of solution to solve this issue but I didn’t found one I was satisfied with. When trying to debug this “bug” I realized that if I inspect the content of the SelectedItems property in the debug view then the binding was working. So I came up with a solution around that strange side effect.
First let’s try to reproduce the problem. The first thing you need to do is to create a new Silverlight application. Accept all the default, it doesn’t matter. Next put this code in the MainPage.xaml
<UserControl x:Class="ListBoxSelecteItemsBug.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:fix="clr-namespace:ListBoxSelecteItemsBug" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="400"> <Grid x:Name="LayoutRoot" Background="White"> <StackPanel Orientation="Vertical"> <ListBox x:Name="myListBox" Height="200" SelectionMode="Extended" ItemsSource="{Binding MyItems}" /> <Button Content="Click me" Command="{Binding DoItCommand}" CommandParameter="{Binding SelectedItems, ElementName=myListBox}" /> <Button Content="Make it work" Click="ButtonBase_OnClick" /> </StackPanel> </Grid> </UserControl>
Notice the “CommandParameter” binding at line 22 binding to “SelectedItems” on “myListBox”. Then Put the following code in the MainPage.xaml.cs (code behind).
using System; using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Windows; using System.Windows.Controls; using System.Windows.Controls.Primitives; using System.Windows.Data; using System.Windows.Input; namespace ListBoxSelecteItemsBug { public partial class MainPage : UserControl { private readonly ICommand _doItCommand = new MyCommand(); private readonly ObservableCollection<string> _myItems = new ObservableCollection<string>(); public MainPage() { _myItems.Add("test1"); _myItems.Add("test2"); _myItems.Add("test3"); _myItems.Add("test4"); _myItems.Add("test5"); _myItems.Add("test6"); _myItems.Add("test7"); InitializeComponent(); DataContext = this; } public ICommand DoItCommand { get { return _doItCommand; } } public ObservableCollection<string> MyItems { get { return _myItems; } } private void ButtonBase_OnClick(object sender, RoutedEventArgs e) { MessageBox.Show(string.Format("{0} actual selected items", myListBox.SelectedItems.Count)); } } public class MyCommand : ICommand { #region ICommand Members public bool CanExecute(object parameter) { return true; } public void Execute(object parameter) { var list = (ICollection<object>) parameter; MessageBox.Show(string.Format("{0} items selected", list.Count())); } public event EventHandler CanExecuteChanged; #endregion } }
For simplicity purpose I put everything in the same file but wouldn’t do that normally.
The concept here is simple. If you run this application you will see a ListBox with 7 items in it. You can select one or more of these items and click on “Click me” button. If you do that you should see a popup with “0 items selected” displayed. This proves that the “SelectedItems” is not working. Now if you click on “Make it work” button you should see the actual number of item you have selected previously. Now click again on “Click me” and the number should also be right.
What happened in this sequence of event is simple. The first time you click on “Click me” button you see the initial binding value of number of “SelectedItems” which is 0. The next time you click on it will display the right number because accessing “SelectedItems” outside of data binding seems to refresh its value.
How can we trigger that refresh automatically? With an attached property.
Now add a new file to the Silverlight project call it ListBoxFix and paste it this content:
using System.Windows; namespace ListBoxSelecteItemsBug { public static class ListBoxFix { public static bool GetSelectedItemsBinding(System.Windows.Controls.ListBox element) { return (bool)element.GetValue(SelectedItemsBindingProperty); } public static void SetSelectedItemsBinding(System.Windows.Controls.ListBox element, bool value) { element.SetValue(SelectedItemsBindingProperty, value); if (value) { element.SelectionChanged += (sender, args) => { // Dummy code to refresh SelectedItems value var x = element.SelectedItems; }; } } public static readonly DependencyProperty SelectedItemsBindingProperty = DependencyProperty.RegisterAttached("FixSlecetedItemsBinding", typeof(bool), typeof(FrameworkElement), new PropertyMetadata(false)); } }
The key here is the line 20. The only thing it does is accessing the “SelectedItems”. The last thing to do is to use that AttachedProperty in our ListBox:
<ListBox x:Name="myListBox" Height="200" fix:ListBox.SelectedItemsBinding="True" SelectionMode="Extended" ItemsSource="{Binding MyItems}" />
Doing that, triggers the binding to be refreshed and everything should work.
@ 3/28/2011 09:29:00 PM 9 commentaires
Label: C#, Property, Silverlight, Tip
Tuesday, January 25, 2011
Using a ToDo list more effectively
Have you ever had the need to place a TODO in your code? I’m sure we’ve all done so, for some reason or another. Normally it’s just a temporary reminder that we’ll get back to after finishing off something else, in an attempt to avoid breaking the expensive flow we get our minds into when writing code.
Similar to comments however, TODO’s are only valuable if they have meaningful information, and much like comments, we developers, aren’t necessarily to attentive to such things. A TODO can be a bug, a code smell, an optimization or even a feature that would need to be logged. As such, it would be more valuable if things TODO’s were defined correctly, something that doesn’t often happen (specially when considering the whole flow thing…). That translates into expecting TODO’s inline with:
// TODO: this needs cleaning up
// FEATURE: Need to add support for XYZ
but in turn we get:
// this is some stinky piece of code
// ultimately we need to support feature XYZ
// this code smells worse than a dark alley next to a Club on a Sunday morning
The problem with this, apart from the inconsistency that can cause you sleepless nights, is that things can get lost. The TaskList feature in Visual Studio requires these kind of comments to follow a certain pattern, and even when that occurs, the way they are presented leaves a bit to be desired.
[Visual Studio Task List]
Enhancing ToDo’s
ReSharper ToDo management adds several benefits over Visual Studio’s built-in. But before we see these, let’s first examine how we can solve the previous problem. To recall, what we want to do is be able to support multiple formats when it comes to defining comments, so // TODO: fix this and // add this to the list of ToDo’s to fix both would appear under the list of ToDo’s.
Fortunately, the way ReSharper allows us to define ToDo items make this very simple. First, in order to access the definitions, we go to ReSharper| Options | ToDo Items
Selecting any of the items (for instance the first one) and double-clicking or clicking on Edit, we get the definition dialog box:
As opposed to the default Visual Studio, with ReSharper we use regular expression. This provides us with the flexibility required. The above example for instance is telling ReSharper to search for any pattern that contains the word TODO in it. By default, normally these patterns are searched for in comments, although we can optionally look in strings and identifiers too. We do not have to worry about defining case-sensitivity in the regular expression. Instead we can just mark the Case sensitive checkbox if we require it. Finally, we can define the color and icon we want displayed when viewing the list of items (which we’ll see later on).
Adding new Items
By default, out of the box, ReSharper comes with four items (Todo, Bug, Note and NotImplemented). We can easily extend this to offer support for other items such as identifying code smells, features, etc. Easiest way is to simply click on an existing item and Duplicate it:
Searching and Filtering Items
Having the items defined, we can now display a list of them by invoking the Todo Items Explorer from ReSharper | Tools | To-do Items, or pressing Ctrl+Alt+D (VS Scheme)
The advantage of course is that it is not required for items to begin with a certain word, as this can be in any position of the string. ReSharper also allows us to filter items so that we can focus on a specific type of task by using the Filter option:
which can also be customized using under Tools | Options (accessible too from the To-do Explorer [icon to the left of Filter]). Last but not least, we can also group items by a variety of options, from namespaces to projects, to types, etc.
Now that’s what I call a colorful, albeit long list of tasks
Source: Jetbrain.
Wednesday, January 12, 2011
TFS 2010 - Urban Turtle for a Better Scrum
TFS 2010 - Urban Turtle for a Better Scrum
If you doing Scrum in TFS 2010 this is an Add-on you can’t ignore!!! Urban Turtle is built by Pyxis Technologies and provides an awesome Scrum experience for TFS.
Urban Turtle will assist you with your Scrum process with a beautiful Interface and easy functionality though TFS 2010 Web Access.
Sounds Good? give it a try http://urbanturtle.com – You can download it for 30 days
Planning Board
- Prioritize your backlog using drag-and-drop interface
- Change to priority of a user story and the task will automatically follow
- Easy filtering let's you focus on what you are doing
- Plan your work with a simple drag-and-drop
- Effortlessly add tasks to a user story
Task Board
- Task board to view completed, ongoing and remaining work at a glance
- Select or close a task in a second using drag-and-drop
- Increase the efficiency of your Daily Scrum by providing transparency to your team
- Sprint Burndown with live data to make sure you deliver what you are committed to
- Makes impediment visible to easily eliminate it
Tuesday, January 11, 2011
Urban Turtle–The best add-in to VS2010 for Agile development
Everyone wants to do agile software development these days but without the right tool its near to impossible. Pyxis is working for months to put their expertise in agile software development in a box called Urban Turtle.
Mario Cardinal, the host of the Visual Studio Talk Show, is quite happy these days. He works with the Urban Turtle team and they received significant support from Microsoft. Brian Harry, who is the Product Unit Manager for Team Foundation Server, has published an outstanding blog post about Urban Turtle that says: "...awesome Scrum experience for TFS.” You can read Brian Harry's blog post at the following URL: http://urbanturtle.com/awesome.