WPF is a very powerful framework for GUI development. Among other things, it contains a unified approach to user input validation. Adding validation in WPF is very straightforward in most cases. However, validating DataGrid rows is slightly challenging. However, the good people of the world has already taken care of the problem and provided quite detailed walk-throughs. I recommend reading this interesting article (WPF DataGrid Practical Examples) about WPF DataGrid.
Monitoring text log files is quite important activity in our day to day programming lives. Unfortunately, Windows operating system does not include convenient tools to perform the task by default. Nothing comparing to
tail -f or GNU
less is deployed with an installation of the OS from Redmond. Luckily, some free alternatives are available on the Internet.
WPF is still relatively new and many developers are only scratching the surface of its abilities. Coming from a different framework, one must learn anew how to do the familiar tasks. Sometimes you need to to trigger a click or some other event for one of your WPF controls, such as a button, a menu or a checkbox, directly from code. There are no methods on the controls to invoke these events explicitly.
This is most certainly not the recommended way of implementing QuickSort, it assumes there are no duplicates, but it should work:
private IList<int> sort(IList<int> a)
if (a.Count <= 1)
I have recently installed Fedora Core 12 on my server box. It was an upgrade from Fedora Core 9 and I had to do an intermediate upgrade from 9 to 10, since direct transition from 9 to 12 is not supported. Aside from this small annoyance the process went through very smoothly. It looks like Fedora Core 12 supports an "in place" upgrade mode, similar to recent version of Ubuntu. That means that a new release of the system comes out, you don't need to create the upgrade media (DVD or a USB image), but can upgrade directly via your current session.
With arrival of WPF the usage of
INotifyPropertyChanged interface has expanded dramatically. The most annoying and dangerous part of implementing the interface is, obviously the fact, that you have to pass your option names as strings. This leaves your code prone to bugs - if in 3 months time you rename one of the properties, there is very good chance that you will forget to update the string name as well. In order to overcome the problem we can use some reflection and a little bit of boiler plate code. The good people of the Internet have done all the work for us already, so just copy, paste and enjoy!
Serialization in .NET world is not straightforward. For years we've been told to use
XmlSerializer, but it has its limitations. It is unable to serialize anything but the public properties/fields, it cannot deal with interfaces in most of the circumstances (specific collection interfaces being the only notable exception) etc.
It is nice to be able to blog about software. For instance, a few years ago I wrote an article about web development using C++. I still get a comment or two about it almost every week, despite the fact that not a single line of code has been written for the project, unfortunately. However, if I ever took the initiative and started working on it, I would, no doubt, write some interesting progress reports here as well. As things go, it would be very neat to show off some code in the process.
I have never suspected that Microsoft had this built-in, but it appears to be the case. Code generator called T4, which targets both C# or VB.NET, is built into your copy of Visual Studio and is available as you read this article. Basically, all you need is to add a new file to your solution with the extension
.tt, and that's it, besides from actually writing the code for the template.
For years I was server-oriented developer, quite often writing code for Unix environment and helping others to do so. However I never mind doing occasional user-oriented application or two. Lately I've been doing a lot of .NET GUI development using WPF (Windows Presentation Framework). A small task seems to come up quite often. If you have a GUI application, you usually want it to start in the same state it was left it when used last time. In particular this is true regarding its position and size.