<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" media="screen" href="/styles/xslt/rss.xslt"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:c9="http://channel9.msdn.com">
<channel>
	<title>Comment Feed for Channel 9 - Binding b&#225;sico para aplica&#231;&#245;es Metro Style</title>
	<atom:link rel="self" type="application/rss+xml" href="http://channel9.msdn.com/posts/Binding-basico-para-aplicacoes-metro-style/rss"></atom:link>
	<image>
		<url>http://files.channel9.msdn.com/thumbnail/b789d922-aaf0-4a9b-a190-32124a591ded.png</url>
		<title>Channel 9 - Binding b&#225;sico para aplica&#231;&#245;es Metro Style</title>
		<link></link>
	</image>
	<description>Por Vin&#237;cius Souza Microsoft Technical Evangelist Este artigo apresenta como vincular um controle a um &#250;nico item ou vincular um controle de lista a uma cole&#231;&#227;o de itens em um aplicativo estilo Metro. Apresenta tamb&#233;m como personalizar a exibi&#231;&#227;o de itens de controle, implementar uma exibi&#231;&#227;o de detalhes com base em uma sele&#231;&#227;o, e converter dados para exibi&#231;&#227;o. Realizando Binding para um item simplesBasicamente o Data Binding (vincula&#231;&#227;o de dados) &amp;nbsp;consiste em uma origem e um destino. O destino de um binding &#233; tipicamente uma propriedade de um controle. Veja exemplo abaixo: &amp;lt;Grid&amp;gt;
   &amp;lt;Grid.ColumnDefinitions&amp;gt;
      &amp;lt;ColumnDefinition Width=&amp;quot;Auto&amp;quot;/&amp;gt;
      &amp;lt;ColumnDefinition Width=&amp;quot;*&amp;quot;/&amp;gt;
   &amp;lt;/Grid.ColumnDefinitions&amp;gt;
   &amp;lt;TextBlock x:Name=&amp;quot;pageTitle&amp;quot; Text=&amp;quot;{StaticResource AppName}&amp;quot; /&amp;gt;
&amp;lt;/Grid&amp;gt; &amp;nbsp;O exemplo acima apresenta o binding de um controle para um objeto simples, o destino do binding nesse caso &#233; a propriedade Text de um controle do tipo TextBlock e a fonte &#233; a vari&#225;vel AppName do tipo String definida no arquivo App.xaml. Funcionamento do Binding &amp;nbsp; Neste caso o tipo de binding aplicado &#233; o OneWay, valor aplicado por padr&#227;o. O que significa que o dado &#233; recuperado de uma origem, mas altera&#231;&#245;es n&#227;o s&#227;o aplicadas de volta. Realizando Binding para uma cole&#231;&#227;o de objetosUmas das tarefas mais comuns no desenvolvimento de aplica&#231;&#245;es &#233; o de fazer o Binding para uma cole&#231;&#227;o de objetos de neg&#243;cio. Em C# e Visual Basic, a classe gen&#233;rica ObservableCollection&amp;lt;T&amp;gt;&amp;nbsp; &#233; uma boa escolha de uma cole&#231;&#227;o para realizar o binding, porque ele implementa as interfaces INotifyPropertyChanged e InotifyCollectionChanged. Estas interfaces fornecem notifica&#231;&#227;o de mudan&#231;a para os controles que est&#227;o ligados, quando uma propriedade de um item &#233; alterado ou a propriedade de uma cole&#231;&#227;o &#233; alterada. O exemplo a seguir realiza o bind de uma cole&#231;&#227;o de objetos para uma controle ComboBox: &amp;lt;Grid x:Name=&amp;quot;ContentPanel&amp;quot; Grid.Row=&amp;quot;1&amp;quot; Margin=&amp;quot;12,0,12,0&amp;quot;&amp;gt;
    &amp;lt;ComboBox x:Name=&amp;quot;ComboBox1&amp;quot; ItemsSource=&amp;quot;{Binding}&amp;quot;
        Foreground=&amp;quot;Black&amp;quot; FontSize=&amp;quot;30&amp;quot; Height=&amp;quot;50&amp;quot; Width=&amp;quot;780&amp;quot;/&amp;gt;
&amp;lt;/Grid&amp;gt; public ObservableCollection&amp;lt;Recording&amp;gt; MyMusic = new ObservableCollection&amp;lt;Recording&amp;gt;();
 
public Page()
{
    InitializeComponent();
 
    // Add items to the collection.
    MyMusic.Add(new Recording(&amp;quot;Chris Sells&amp;quot;, &amp;quot;Chris Sells Live&amp;quot;,
        new DateTime(2008, 2, 5)));
    MyMusic.Add(new Recording(&amp;quot;Luka Abrus&amp;quot;,
        &amp;quot;The Road to Redmond&amp;quot;, new DateTime(2007, 4, 3)));
    MyMusic.Add(new Recording(&amp;quot;Jim Hance&amp;quot;,
        &amp;quot;The Best of Jim Hance&amp;quot;, new DateTime(2007, 2, 6)));
 
    // Set the data context for the combo box.
    ComboBox1.DataContext = MyMusic;
}
 
 
public class Recording
{
    public Recording() { }
 
    public Recording(string artistName, string cdName, DateTime release)
    {
        Artist = artistName;
        Name = cdName;
        ReleaseDate = release;
    }
 
    public string Artist { get; set; }
    public string Name { get; set; }
    public DateTime ReleaseDate { get; set; }
 
    // Override the ToString method.
    public override string ToString()
    {
        return Name &amp;#43; &amp;quot; by &amp;quot; &amp;#43; Artist &amp;#43; &amp;quot;, Released: &amp;quot; &amp;#43; ReleaseDate.ToString(&amp;quot;d&amp;quot;);
    }
}&amp;nbsp;Para exibir os registros de m&#250;sica em um controle ComboBox, a propriedade ItemsSource do controle recebe o valor de Binding e a propriedade DataContex recebe a cole&#231;&#227;o de objetos do tipo Recording, que fornece a origem para a opera&#231;&#227;o de liga&#231;&#227;o (binding). Um ComboBoxItem &#233; criado para cada item da cole&#231;&#227;o. O m&#233;todo ToString &#233; automaticamento executado para cada objeto to tipo Recording para apresentar o item de um ComboBox. Exibindo itens em um controle usando um modelo de dadosVoc&#234; pode exibir os itens em uma lista usando o m&#233;todo ToString do item. No entanto, um cen&#225;rio mais comum &#233; utilizar uma visualiza&#231;&#227;o personalizada de dados vinculados utilizando um DataTemplate. Um DataTemplate permite que voc&#234; personalize como os itens de uma lista s&#227;o apresentados em um controle. Normalmente, voc&#234; pode definir o modelo de dados utilizando a propriedade ContentTemplate de um controle de conte&#250;do ou a propriedade ItemTemplate de um controle de itens. O exemplo a seguir mostra a mesma lista de grava&#231;&#245;es ligados a uma caixa de combina&#231;&#227;o usando um modelo de dados. Uma caixa de combina&#231;&#227;o &#233; um controle do tipo ItemsControl, o que significa que voc&#234; estabele&#231;a um modelo de dados para cada item, definindo sua propriedade ItemTemplate para um modelo de dados. Observe como os registros s&#227;o apresentados diferentemente do exemplo anterior. No XAML, voc&#234; pode ver a defini&#231;&#227;o do modelo de dados. O modelo de dados cont&#233;m um StackPanel com quatro controles TextBlock. O StackPanel utiliza a orienta&#231;&#227;o horizontal, de modo que os quatro controlos de bloco de texto aparecem lado a lado. Dois dos controles TextBlock est&#227;o vinculados &#224;s propriedades Artist e Name de um objeto Recording. Os outros dois controles TextBlock exibem texto est&#225;tico. Para cada item ligado, a liga&#231;&#227;o fornece o caminho para a propriedade sobre o objeto de grava&#231;&#227;o. No exemplo a seguir, essa liga&#231;&#227;o baseia-se no contexto de dados a ser definida para a lista de grava&#231;&#245;es. &amp;nbsp;&amp;lt;ComboBox x:Name=&amp;quot;ComboBox1&amp;quot; ItemsSource=&amp;quot;{Binding}&amp;quot; Foreground=&amp;quot;Black&amp;quot; FontSize=&amp;quot;30&amp;quot; Height=&amp;quot;50&amp;quot; Width=&amp;quot;450&amp;quot;&amp;gt;
  &amp;lt;ComboBox.ItemTemplate&amp;gt;
    &amp;lt;DataTemplate&amp;gt;
      &amp;lt;StackPanel Orientation=&amp;quot;Horizontal&amp;quot; Margin=&amp;quot;2&amp;quot;&amp;gt;
        &amp;lt;TextBlock Text=&amp;quot;Artist:&amp;quot; Margin=&amp;quot;2&amp;quot; /&amp;gt;
        &amp;lt;TextBlock Text=&amp;quot;{Binding Artist}&amp;quot; Margin=&amp;quot;2&amp;quot; /&amp;gt;
        &amp;lt;TextBlock Text=&amp;quot;CD:&amp;quot; Margin=&amp;quot;10,2,0,2&amp;quot; /&amp;gt;
        &amp;lt;TextBlock Text=&amp;quot;{Binding Name}&amp;quot; Margin=&amp;quot;2&amp;quot; /&amp;gt;
      &amp;lt;/StackPanel&amp;gt;
    &amp;lt;/DataTemplate&amp;gt;
  &amp;lt;/ComboBox.ItemTemplate&amp;gt;
&amp;lt;/ComboBox&amp;gt; Convers&#227;o de dados para exibi&#231;&#227;o nos controlesUtilizando um Converter (conversor), voc&#234; pode formatar e apresentar outros tipos de objetos, como um TextBox. Por exemplo, voc&#234; pode apresentar um r&#243;tulo e uma data formatada ao invez de apresentar apenas uma data. O trecho de c&#243;digo a seguir apresenta uma implementa&#231;&#227;o de um Converter para a data de lan&#231;amento do &#225;lbum da lista de grava&#231;&#245;es. &amp;lt;UserControl x:Class=&amp;quot;TestDataBindingQS.Page2&amp;quot;
  xmlns=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;
  xmlns:x=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;
  xmlns:d=&amp;quot;http://schemas.microsoft.com/expression/blend/2008&amp;quot;
  xmlns:mc=&amp;quot;http://schemas.openxmlformats.org/markup-compatibility/2006&amp;quot;
  xmlns:local=&amp;quot;using:TestDataBindingQS&amp;quot;
  mc:Ignorable=&amp;quot;d&amp;quot;
  d:DesignHeight=&amp;quot;768&amp;quot; d:DesignWidth=&amp;quot;1366&amp;quot;&amp;gt;

   &amp;lt;UserControl.Resources&amp;gt;
      &amp;lt;local:StringFormatter x:Key=&amp;quot;StringConverter&amp;quot;/&amp;gt;
   &amp;lt;/UserControl.Resources&amp;gt;

   &amp;lt;Grid x:Name=&amp;quot;LayoutRoot&amp;quot; Background=&amp;quot;#FF0C0C0C&amp;quot;&amp;gt;
      &amp;lt;StackPanel Width=&amp;quot;750&amp;quot; Height=&amp;quot;200&amp;quot; VerticalAlignment=&amp;quot;Center&amp;quot; HorizontalAlignment=&amp;quot;Center&amp;quot;&amp;gt;
          &amp;lt;ComboBox x:Name=&amp;quot;ComboBox1&amp;quot; ItemsSource=&amp;quot;{Binding}&amp;quot; Foreground=&amp;quot;Black&amp;quot; FontSize=&amp;quot;30&amp;quot; Height=&amp;quot;50&amp;quot; Width=&amp;quot;750&amp;quot;&amp;gt;
             &amp;lt;ComboBox.ItemTemplate&amp;gt;
                &amp;lt;DataTemplate&amp;gt;
                  &amp;lt;StackPanel Orientation=&amp;quot;Horizontal&amp;quot; Margin=&amp;quot;2&amp;quot;&amp;gt;
                      &amp;lt;TextBlock Text=&amp;quot;Artist:&amp;quot; Margin=&amp;quot;2&amp;quot; /&amp;gt;
                      &amp;lt;TextBlock Text=&amp;quot;{Binding Artist}&amp;quot; Margin=&amp;quot;2&amp;quot; /&amp;gt;
                      &amp;lt;TextBlock Text=&amp;quot;CD:&amp;quot; Margin=&amp;quot;10,2,0,2&amp;quot; /&amp;gt;
                      &amp;lt;TextBlock Text=&amp;quot;{Binding Name}&amp;quot; Margin=&amp;quot;2&amp;quot; /&amp;gt;
                   &amp;lt;/StackPanel&amp;gt;
                &amp;lt;/DataTemplate&amp;gt;
            &amp;lt;/ComboBox.ItemTemplate&amp;gt;
         &amp;lt;/ComboBox&amp;gt;

         &amp;lt;!--The UI for the details view--&amp;gt;
         &amp;lt;StackPanel x:Name=&amp;quot;RecordingDetails&amp;quot;&amp;gt;
            &amp;lt;TextBlock Text=&amp;quot;{Binding Artist}&amp;quot; FontSize=&amp;quot;30&amp;quot; FontWeight=&amp;quot;Bold&amp;quot; /&amp;gt;
            &amp;lt;TextBlock Text=&amp;quot;{Binding Name}&amp;quot; FontSize=&amp;quot;30&amp;quot; FontStyle=&amp;quot;Italic&amp;quot; /&amp;gt;
            &amp;lt;TextBlock Text=&amp;quot;{Binding ReleaseDate, Converter={StaticResource StringConverter}, ConverterParameter=Released: \{0:d\}}&amp;quot; FontSize=&amp;quot;30&amp;quot;  /&amp;gt;
         &amp;lt;/StackPanel&amp;gt;
      &amp;lt;/StackPanel&amp;gt;
   &amp;lt;/Grid&amp;gt;
&amp;lt;/UserControl&amp;gt; public class StringFormatter : IValueConverter
{
    // This converts the value object to the string to display.
    // This will work with most simple types.
    public object Convert(object value, Type targetType,
        object parameter, System.Globalization.CultureInfo culture)
    {
        // Retrieve the format string and use it to format the value.
        string formatString = parameter as string;
        if (!string.IsNullOrEmpty(formatString))
        {
            return string.Format(culture, formatString, value);
        }
 
        // If the format string is null or empty, simply
        // call ToString() on the value.
        return value.ToString();
    }
 
    // No need to implement converting back on a one-way binding
    public object ConvertBack(object value, Type targetType,
        object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}Uma classe conversora deriva da interface IValueConverter. A interface IValueConverter possui dois m&#233;todos o Convert e ConvertBack.Para o tipo de bindig de sentido &#250;nico (One-Way) da origem de dados para o controle de destino, voc&#234; somente deve implementar o m&#233;todo Convert. O conversor neste exemplo &#233; gen&#233;rico. Voc&#234; fornece uma String no parametro format, e o conversor utiliza o m&#233;todo String.Format para realizar a formata&#231;&#227;o. Se uma m&#225;scara de formata&#231;&#227;o n&#227;o &#233; forneceido, o conversor retorna o resultado chamando o m&#233;todo ToString() de um objeto. Uma vez implementado o conversor, voc&#234; pode criar uma inst&#226;ncia da classe de convers&#227;o e informar os bindings para utilizar essa inst&#226;ncia. Neste exemplo, isto &#233; realizado no XAML. Uma inst&#226;ncia do conversor &#233; criado como um recurso est&#225;tico e recebe uma chave. A chave &#233; depois utilizada quando a propriedade do conversor &#233; atualizada no binding. Conclus&#227;oO Binding &#233; uma t&#233;cnica muito utilizada para apresentar os dados na interface e manter os dados do modelo de dados atualizados. Na programa&#231;&#227;o Metro Style utilizamos Binding a todo instante, e por isso, o conceito de Binding apresentado aqui deve ser muito bem compreendido. &amp;nbsp; </description>
	<link></link>
	<language>en</language>
	<pubDate>Wed, 22 May 2013 00:02:19 GMT</pubDate>
	<lastBuildDate>Wed, 22 May 2013 00:02:19 GMT</lastBuildDate>
	<generator>Rev9</generator>
	<item>
		<title>Re: Binding b&#225;sico para aplica&#231;&#245;es Metro Style</title>
		<description>
			<![CDATA[Parab&#233;ns pelo artigo Vinicius, o Binding &#233; ponto chave no XAML.<p>posted by Renato Haddad</p>]]>
		</description>
		<link>http://channel9.msdn.com/posts/Binding-basico-para-aplicacoes-metro-style#c634789087347379005</link>
		<pubDate>Thu, 26 Jul 2012 14:12:14 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/posts/Binding-basico-para-aplicacoes-metro-style#c634789087347379005</guid>
		<dc:creator>Renato Haddad</dc:creator>
	</item>
	<item>
		<title>Re: Binding b&#225;sico para aplica&#231;&#245;es Metro Style</title>
		<description>
			<![CDATA[<p>Parabéns&nbsp;pelo artigo, serviu para clarear alguns pontos</p><p>posted by vitoravale</p>]]>
		</description>
		<link>http://channel9.msdn.com/posts/Binding-basico-para-aplicacoes-metro-style#c634794393585033692</link>
		<pubDate>Wed, 01 Aug 2012 17:35:58 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/posts/Binding-basico-para-aplicacoes-metro-style#c634794393585033692</guid>
		<dc:creator>vitoravale</dc:creator>
	</item>
	<item>
		<title>Re: Binding b&#225;sico para aplica&#231;&#245;es Metro Style</title>
		<description>
			<![CDATA[Quem j&#225; trabalha com WPF ou Silverlight vai pegar f&#225;cil.<p>posted by Elvis Rodrigues</p>]]>
		</description>
		<link>http://channel9.msdn.com/posts/Binding-basico-para-aplicacoes-metro-style#c634813449313653222</link>
		<pubDate>Thu, 23 Aug 2012 18:55:31 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/posts/Binding-basico-para-aplicacoes-metro-style#c634813449313653222</guid>
		<dc:creator>Elvis Rodrigues</dc:creator>
	</item>
	<item>
		<title>Re: Binding b&#225;sico para aplica&#231;&#245;es Metro Style</title>
		<description>
			<![CDATA[<p>Muito bom...</p><p>posted by terra</p>]]>
		</description>
		<link>http://channel9.msdn.com/posts/Binding-basico-para-aplicacoes-metro-style#c634825348880400193</link>
		<pubDate>Thu, 06 Sep 2012 13:28:08 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/posts/Binding-basico-para-aplicacoes-metro-style#c634825348880400193</guid>
		<dc:creator>terra</dc:creator>
	</item>
</channel>
</rss>