Using the DataGrid WPF Toolkit,
this post shows a simple client/server application to fill a DataGrid
according to the information that is provided by a WCF service. When
any row receives a double click, a new document (jpeg or docx for this
example) is opened by an external application.
The
application is designed using MVVM pattern, where View and ViewModel
are placed in the client side and Model in the server side. In our
example, we will show a set of “Alerts” in a DataGrid , so that we will
have the next elements:
- Model: Alert. This class provide all the information about an “Alert” entity.
- View: Custom DataGrid with all the alerts
- ViewModel:
Intermediary element between Model and View to decouple the alert model
from its view. In our case, ViewModel provides a collection of alerts
and a command to open its associated document.
About the DataGrid control, I would like to highlight the next points:
- Double
click behavior in DataGrid control using attached properties. See the
new HandleDoubleClick and TheCommandToRun properties in DataGrid, which
are declared in WpfApplication.TestGridView => AttachedProperties
=> SelectorDoubleClickCommandBehavior.cs
- Using
DataGridTemplateColumn: I got some problems trying to apply padding in
the cell content, regarding the rest styles and behaviors (see Themes
folder). To resolve it, I’ve used a DataGridTemplateColumn, which
allows integrate any custom content in a cell. In this way, I’m using a
TextBlock with a specify margin to simulate that padding.
In
the server side (WCF service), I’ve implemented a request/response
messages architecture, so that it would be easier and scalable to add
other functionality like delete or create alerts (see the service
implementation in WcfService.ServiceLibrary => AlertsService.cs, as
well as the retrieve messages and handler).
Download source (VS2008)
This
application is based on different sources, which can be found below. At
the same time, I would like to be grateful to my workmate Wael, who is a great developer and he always gives me great advices.
Useful Links: