<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
xmlns:rawvoice="http://www.rawvoice.com/rawvoiceRssModule/"
>

<channel>
	<title>Yohan Jasdid&#039;s Blog &#38; Stories &#187; Splitter</title>
	<atom:link href="http://yohan.jasdid.com/tag/splitter/feed/" rel="self" type="application/rss+xml" />
	<link>http://yohan.jasdid.com</link>
	<description>Around the world..</description>
	<lastBuildDate>Fri, 11 Nov 2011 17:20:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<!-- podcast_generator="Blubrry PowerPress/2.0.4" -->
	<itunes:summary>Around the world..</itunes:summary>
	<itunes:author>Yohan Jasdid&#039;s Blog &amp; Stories</itunes:author>
	<itunes:explicit>no</itunes:explicit>
	<itunes:image href="http://yohan.jasdid.com/wp-content/plugins/powerpress/itunes_default.jpg" />
	<itunes:subtitle>Around the world..</itunes:subtitle>
	<image>
		<title>Yohan Jasdid&#039;s Blog &amp; Stories &#187; Splitter</title>
		<url>http://yohan.jasdid.com/wp-content/plugins/powerpress/rss_default.jpg</url>
		<link>http://yohan.jasdid.com</link>
	</image>
		<item>
		<title>Caliburn y Silverlight ejemplo sencillo..</title>
		<link>http://yohan.jasdid.com/2010/06/caliburn-y-silverlight-ejemplo-sencillo/</link>
		<comments>http://yohan.jasdid.com/2010/06/caliburn-y-silverlight-ejemplo-sencillo/#comments</comments>
		<pubDate>Fri, 18 Jun 2010 22:34:02 +0000</pubDate>
		<dc:creator>yohan.jasdid</dc:creator>
				<category><![CDATA[Bits]]></category>
		<category><![CDATA[Caliburn]]></category>
		<category><![CDATA[MVVM Framework]]></category>
		<category><![CDATA[silverlight]]></category>
		<category><![CDATA[Splitter]]></category>

		<guid isPermaLink="false">http://yohan.jasdid.com/?p=864</guid>
		<description><![CDATA[Estos ultimos dias he estado checando Caliburn (MVVM framework) debido a la posibilidad de trabajar con el en un futuro cercano, asi que he decidido postear un muy parecido ejemplo al que publique hace poco donde trabajaban un expander y un splitter de manera conjunta, ahora como estoy utilizando Silverlight pues voy a deberles el [...]]]></description>
			<content:encoded><![CDATA[<p>Estos ultimos dias he estado checando Caliburn (MVVM framework) debido a la posibilidad de trabajar con el en un futuro cercano, asi que he decidido postear un muy parecido ejemplo al que publique hace poco donde trabajaban un expander y un splitter de manera conjunta, ahora como estoy utilizando Silverlight pues voy a deberles el expander ya que al parecer ese control no es soportado por esta tecnologia <img src='http://yohan.jasdid.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  tal vez en el Silverlight Toolkit venga uno pero ese sera un tema para despues..</p>
<p>Caliburn me ha dejado impresionado con la cantidad de cosas que puedes hacer con tan poco codigo debido a la manera que esta diseniado el framework practicamente te permite enlazar controles y eventos y un monton de cosas que hace por ti detras del telon, lo unico malo es que la documentacion no es muy extensa y no existen tantas aplicaciones como ejemplo o quickstarts (como PRISM por ejemplo) asi que habra que contribuir con un granito de arena en la promocion de este excelente framework.</p>
<p>Bueno para empezar debemos crear un nuevo proyecto de tipo Silverlight, yo estoy utilizando el VS2010 y el Silverlight 4 que es una instalacion separada, una vez creado este proyecto y configurado automaticamente por Visual Studio removemos el control MainWindow.xaml y lo reemplazamos por ShellView.xaml que sera nuestro contenedor de contenido, a continuacion lo configuramos de la siguiente manera en el App.xaml principal para soportar Caliburn,</p>
<p>App.xaml</p>
<pre class="brush: plain; title: ; notranslate">
&lt;am:CaliburnApplication
    xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
    xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;
    xmlns:am=&quot;clr-namespace:Caliburn.PresentationFramework.ApplicationModel;assembly=Caliburn.PresentationFramework&quot;
    x:Class=&quot;ExpanderAndSplitter.Caliburn.App&quot;&gt;

    &lt;!--This is a caliburn application --&gt;
    &lt;Application.Resources&gt;
    &lt;/Application.Resources&gt;
&lt;/am:CaliburnApplication&gt;
</pre>
<p>Y a continuacion modificamos el code behind para que derive de la clase CaliburnApplication,<br />
App.xaml.cs</p>
<pre class="brush: csharp; title: ; notranslate">
using ExpanderAndSplitter.Caliburn.ViewModels;
using Caliburn.PresentationFramework.ApplicationModel;

namespace ExpanderAndSplitter.Caliburn
{
     public partial class App :  CaliburnApplication
    {

        public App()
        {
            InitializeComponent();
        }

        /// &lt;summary&gt;
        /// Creating the root view model of the app, the shell
        /// &lt;/summary&gt;
        /// &lt;returns&gt;Root view model (shell)&lt;/returns&gt;
        protected override object CreateRootModel()
        {
            return new ShellViewModel();
        }

     }
}
</pre>
<p>En los pasos anteriores definimos la applicacion como un applicacion Caliburn y a continuacion hacemos Override al CreatRootModel() donde le diremos a Caliburn cual es el objeto de la vista que queremos como Root object o sea como contenedor principal de la aplicacion, cabe mencionar que caliburn es orientado a modelos y majena mucho el concepto de convenciones por lo que el framework detras del telon hara una serie de comprobaciones para ubicar la vista que pertenece al &#8220;ViewModel&#8221; que especificamos como contenedor principal en el Override por lo que no tendremos que hacer nada especial para que la vista de tal modelo este bindeada al modelo, MAGIA PURA!!!</p>
<p>ShellViewModel.cs</p>
<pre class="brush: csharp; title: ; notranslate">
using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Caliburn.Core;
using System.Collections.ObjectModel;
using ExpanderAndSplitter.Caliburn.Models;

namespace ExpanderAndSplitter.Caliburn.ViewModels
{
    public class ShellViewModel : PropertyChangedBase
    {

        #region Fields

        private GridLength _masterRowHeight = new GridLength(1, GridUnitType.Star);
        private GridLength _splitterRowHeight = new GridLength(0);
        private GridLength _detailRowHeight = new GridLength(1, GridUnitType.Auto);

        public ObservableCollection&lt;ItemViewModel&gt; _masterItems = null;
        public ObservableCollection&lt;ItemViewModel&gt; _detailItems = null;

        #endregion // Fields

        public ShellViewModel()
        {
            MasterRowHeight = new GridLength(1, GridUnitType.Star);
            SplitterRowHeight = new GridLength(20);
            DetailRowHeight = new GridLength(1, GridUnitType.Star);

            MasterItems = new ObservableCollection&lt;ItemViewModel&gt;();
            DetailItems = new ObservableCollection&lt;ItemViewModel&gt;();

            for (int i = 0; i &lt; 1000; i++)
            {
                ItemModel masterIM = new ItemModel(&quot;Master Item Dummy &quot; + i.ToString(), i.ToString());
                ItemModel detailIM = new ItemModel(&quot;Detail Item Dummy &quot; + i.ToString(), i.ToString());

                ItemViewModel masterIVM = new ItemViewModel(masterIM);
                ItemViewModel detailIVM = new ItemViewModel(detailIM);

                MasterItems.Add(masterIVM);
                DetailItems.Add(detailIVM);
            }

        }

        #region Properties

        public GridLength MasterRowHeight
        {
            get { return _masterRowHeight; }
            set
            {
                _masterRowHeight = value;
                NotifyOfPropertyChange(&quot;MasterRowHeight&quot;);
            }
        }

        public GridLength SplitterRowHeight
        {
            get { return _splitterRowHeight; }
            set
            {
                _splitterRowHeight = value;
                NotifyOfPropertyChange(&quot;SplitterRowHeight&quot;);
            }
        }

        public GridLength DetailRowHeight
        {
            get { return _detailRowHeight; }
            set
            {
                _detailRowHeight = value;
                NotifyOfPropertyChange(&quot;DetailRowHeight&quot;);
            }
        }

        public ObservableCollection&lt;ItemViewModel&gt; MasterItems
        {
            get { return _masterItems; }
            set
            {
                _masterItems = value;
                NotifyOfPropertyChange(&quot;MasterItems&quot;);
            }
        }

        public ObservableCollection&lt;ItemViewModel&gt; DetailItems
        {
            get { return _detailItems; }
            set
            {
                _detailItems = value;
                NotifyOfPropertyChange(&quot;DetailItems&quot;);
            }
        }

        #endregion // Properties

    }
}
</pre>
<p>Siguiendo las convenciones definidas por el framework por default sabemos que las vistas deberan estar situadas en una carpeta llamada Views, los ViewModels al igual deberan estar en su carpeta llamada ViewModels, siendo todo esto configurable, ademas con el codigo fuente podemos definir nuestras propias convenciones <img src='http://yohan.jasdid.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>ShellView.xaml</p>
<pre class="brush: plain; title: ; notranslate">
&lt;UserControl x:Class=&quot;ExpanderAndSplitter.Caliburn.Views.ShellView&quot;
    xmlns:sdk=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk&quot;
    xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
    xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;
    xmlns:d=&quot;http://schemas.microsoft.com/expression/blend/2008&quot;
    xmlns:mc=&quot;http://schemas.openxmlformats.org/markup-compatibility/2006&quot;
    mc:Ignorable=&quot;d&quot;
    d:DesignHeight=&quot;300&quot; d:DesignWidth=&quot;400&quot;&gt;

    &lt;Grid x:Name=&quot;MainContainer&quot; Margin=&quot;5,5,5,5&quot; VerticalAlignment=&quot;Stretch&quot;
          HorizontalAlignment=&quot;Stretch&quot; Background=&quot;Transparent&quot;&gt;
        &lt;Grid.ColumnDefinitions&gt;
            &lt;ColumnDefinition Width=&quot;Auto&quot; /&gt;
            &lt;ColumnDefinition Width=&quot;Auto&quot; /&gt;
            &lt;ColumnDefinition Width=&quot;Auto&quot; /&gt;
            &lt;ColumnDefinition Width=&quot;*&quot; /&gt;
            &lt;ColumnDefinition Width=&quot;Auto&quot; /&gt;
        &lt;/Grid.ColumnDefinitions&gt;
        &lt;Grid.RowDefinitions&gt;
            &lt;RowDefinition Height=&quot;Auto&quot;/&gt;
            &lt;RowDefinition Height=&quot;*&quot;/&gt;
        &lt;/Grid.RowDefinitions&gt;

        &lt;sdk:Label x:Name=&quot;DummyLabel&quot; Content=&quot;Dummy Label&quot; /&gt;
        &lt;ComboBox x:Name=&quot;DummyComboBox&quot; Grid.Column=&quot;1&quot; MinWidth=&quot;100&quot;
                      Margin=&quot;0,0,5,0&quot;/&gt;

        &lt;Button Grid.Column=&quot;2&quot; Width=&quot;100&quot; Content=&quot;Dummy Button&quot; /&gt;
        &lt;sdk:Label x:Name=&quot;Label&quot; Content=&quot;Dummy Label 2&quot; Grid.Column=&quot;4&quot; HorizontalAlignment=&quot;Right&quot; /&gt;

        &lt;Grid Grid.Row=&quot;1&quot; Grid.ColumnSpan=&quot;5&quot; Margin=&quot;0,5,0,0&quot;
              VerticalAlignment=&quot;Stretch&quot; HorizontalAlignment=&quot;Stretch&quot; Background=&quot;Transparent&quot;&gt;
            &lt;Grid.ColumnDefinitions&gt;
                &lt;ColumnDefinition /&gt;
            &lt;/Grid.ColumnDefinitions&gt;
            &lt;Grid.RowDefinitions&gt;
                &lt;RowDefinition x:Name=&quot;MasterRow&quot; Height=&quot;{Binding MasterRowHeight, Mode=TwoWay}&quot; /&gt;
                &lt;RowDefinition x:Name=&quot;SplitterRow&quot; Height=&quot;{Binding SplitterRowHeight, Mode=TwoWay}&quot; /&gt;
                &lt;RowDefinition x:Name=&quot;DetailRow&quot; Height=&quot;{Binding DetailRowHeight, Mode=TwoWay}&quot; /&gt;
            &lt;/Grid.RowDefinitions&gt;

            &lt;Grid Background=&quot;Transparent&quot;&gt;
                &lt;Grid.ColumnDefinitions&gt;
                    &lt;ColumnDefinition Width=&quot;*&quot; /&gt;
                &lt;/Grid.ColumnDefinitions&gt;
                &lt;Grid.RowDefinitions&gt;
                    &lt;RowDefinition Height=&quot;*&quot;/&gt;
                &lt;/Grid.RowDefinitions&gt;

                &lt;sdk:DataGrid x:Name=&quot;MasterGrid&quot;
                            AutoGenerateColumns=&quot;False&quot;
                            ColumnWidth=&quot;*&quot;
                            HorizontalAlignment=&quot;Stretch&quot; VerticalAlignment=&quot;Stretch&quot;
                            ItemsSource=&quot;{Binding MasterItems}&quot;&gt;

                    &lt;sdk:DataGrid.Columns&gt;
                        &lt;sdk:DataGridTextColumn Binding=&quot;{Binding Path=Name}&quot; Header=&quot;Master Name&quot; /&gt;
                        &lt;sdk:DataGridTextColumn Binding=&quot;{Binding Path=ID}&quot; Header=&quot;ID&quot; /&gt;
                    &lt;/sdk:DataGrid.Columns&gt;
                &lt;/sdk:DataGrid&gt;
            &lt;/Grid&gt;

            &lt;sdk:GridSplitter Grid.Row=&quot;1&quot; Background=&quot;Gray&quot;
                              BorderThickness=&quot;1,1,1,1&quot; Width=&quot;Auto&quot; HorizontalAlignment=&quot;Stretch&quot;
                              Height=&quot;6&quot; VerticalContentAlignment=&quot;Top&quot;
                              Padding=&quot;0,0,0,0&quot; Margin=&quot;5,0,5,0&quot; VerticalAlignment=&quot;Center&quot;/&gt;

            &lt;Grid Background=&quot;Transparent&quot; Grid.Row=&quot;2&quot; Margin=&quot;0,5,0,0&quot; &gt;
                &lt;Grid.ColumnDefinitions&gt;
                    &lt;ColumnDefinition Width=&quot;*&quot; /&gt;
                &lt;/Grid.ColumnDefinitions&gt;
                &lt;Grid.RowDefinitions&gt;
                    &lt;RowDefinition Height=&quot;*&quot;/&gt;
                &lt;/Grid.RowDefinitions&gt;

                &lt;sdk:DataGrid x:Name=&quot;DetailGrid&quot;
                            AutoGenerateColumns=&quot;False&quot;
                            ColumnWidth=&quot;*&quot;
                            HorizontalAlignment=&quot;Stretch&quot; VerticalAlignment=&quot;Stretch&quot;
                            ItemsSource=&quot;{Binding DetailItems}&quot;&gt;

                    &lt;sdk:DataGrid.Columns&gt;
                        &lt;sdk:DataGridTextColumn Binding=&quot;{Binding Path=Name}&quot; Header=&quot;Detail Name&quot; /&gt;
                        &lt;sdk:DataGridTextColumn Binding=&quot;{Binding Path=ID}&quot; Header=&quot;ID&quot; /&gt;
                    &lt;/sdk:DataGrid.Columns&gt;
                &lt;/sdk:DataGrid&gt;
            &lt;/Grid&gt;
        &lt;/Grid&gt;
    &lt;/Grid&gt;
&lt;/UserControl&gt;
</pre>
<p>ItemModel.cs</p>
<pre class="brush: csharp; title: ; notranslate">
using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace ExpanderAndSplitter.Caliburn.Models
{
    public class ItemModel
    {

        public ItemModel(string name, string id)
        {
            this.Name = name;
            this.ID = id;
        }

        public string Name
        {
            get;
            set;
        }

        public string ID
        {
            get;
            set;
        }

    }
}
</pre>
<p>Al final la aplicacion luce casi igual que la del post pasado solo que utilizando Caliburn y Silverlight y a excepcion que no se tuvo que utilizar codigo para especificar la relacion entre vista y view model ya que caliburn se encarga de todo esto y muchisimo mas.</p>
<p><a href="http://yohan.jasdid.com/wp-content/uploads/2010/06/Splitter.jpg"><img class="alignnone size-medium wp-image-868" title="Splitter" src="http://yohan.jasdid.com/wp-content/uploads/2010/06/Splitter-450x407.jpg" alt="" width="450" height="407" /></a></p>
<p>Mas adelante si tengo tiempo publicare algo relacionado con los Comandos, Triggers, Efectos y un monton de cosas que puedes aprovechar con caliburn de una manera sencilla, espero les haya gustado y no duden en dejar un comentario pues tal vez hize algo mal ya que apenas son mis inicios con Caliburn.</p>
<p>Puedes bajar el codigo fuente completo y el proyecto del siguiente enlace:  <a href="http://yohan.jasdid.com/wp-content/uploads/2010/06/ExpanderAndSplitter.Caliburn.rar">ExpanderAndSplitter.Caliburn</a></p>
<p>Saludos!<br />
YR</p>
<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=Caliburn+y+Silverlight+ejemplo+sencillo..+http%3A%2F%2Fis.gd%2FW6c39D" title="Post to Twitter"><img class="nothumb" src="http://yohan.jasdid.com/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-micro3.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://delicious.com/post?url=http://yohan.jasdid.com/2010/06/caliburn-y-silverlight-ejemplo-sencillo/&amp;title=Caliburn+y+Silverlight+ejemplo+sencillo.." title="Post to Delicious"><img class="nothumb" src="http://yohan.jasdid.com/wp-content/plugins/tweet-this/icons/en/delicious/tt-delicious-micro3.png" alt="Post to Delicious" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://yohan.jasdid.com/2010/06/caliburn-y-silverlight-ejemplo-sencillo/&amp;t=Caliburn+y+Silverlight+ejemplo+sencillo.." title="Post to Facebook"><img class="nothumb" src="http://yohan.jasdid.com/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-micro3.png" alt="Post to Facebook" /></a> <a target="_blank" rel="nofollow" class="tt" href="https://mail.google.com/mail/?ui=2&amp;view=cm&amp;fs=1&amp;tf=1&amp;su=Caliburn+y+Silverlight+ejemplo+sencillo..&amp;body=Link:+http://yohan.jasdid.com/2010/06/caliburn-y-silverlight-ejemplo-sencillo/%0D%0A%0D%0A----%0D%0A+Estos+ultimos+dias+he+estado+checando+Caliburn+%28MVVM+framework%29+debido+a+la+posibilidad+de+trabajar+con+el+en+un+futuro+cercano%2C+asi+que+he+decidid..." title="Send Gmail"><img class="nothumb" src="http://yohan.jasdid.com/wp-content/plugins/tweet-this/icons/en/gmail/tt-gmail-micro3.png" alt="Send Gmail" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://yohan.jasdid.com/2010/06/caliburn-y-silverlight-ejemplo-sencillo/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

