Sunday, September 2, 2012

Silverlight Data Grid twoway Data binding in code

Silverlight Data Grid twoway Data binding in code

I have a DataGrid with two way binding and not sure why this does not work, any help would be appreciated.

I wanted to dynamically bind to the DataGrid using a twoway binding object.

I used the columns in XAML. If I just set the 'ItemSource" property directly - it works but then the two binding doesn't work - if I change my source in code the Grid doesn't reflect that change.

I created a simple sample to illustrate my setup

Here is the XAML

<UserControl x:Class="SilverlightApplication1.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"     mc:Ignorable="d"     d:DesignHeight="356" d:DesignWidth="590" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk">      <Grid x:Name="LayoutRoot" Background="White">          <sdk:DataGrid AutoGenerateColumns="False" Height="136" HorizontalAlignment="Left" Margin="71,116,0,0" Name="MyGrid" VerticalAlignment="Top" Width="453" >             <sdk:DataGrid.Columns>                 <sdk:DataGridTextColumn Binding="{Binding Path=Label, Mode=TwoWay}" CanUserReorder="True" CanUserResize="True" CanUserSort="True" Width="Auto" Header="Selected" />                 <sdk:DataGridTextColumn Binding="{Binding Path=YValue, Mode=TwoWay}" CanUserReorder="True" CanUserResize="True" CanUserSort="True" Header="Name" Width="*" />             </sdk:DataGrid.Columns>         </sdk:DataGrid>     </Grid> </UserControl> 

Here is the code behind

namespace SilverlightApplication1 {     public partial class MainPage : UserControl     {         public MainPage()         {             InitializeComponent();              ObservableCollection<Value> values = new ObservableCollection<Value>();              values.Add(new Value() { Label = "Sony", YValue = 50 });             values.Add(new Value() { Label = "Dell", YValue = 35 });             values.Add(new Value() { Label = "HP", YValue = 27 });             values.Add(new Value() { Label = "HCL", YValue = 17 });             values.Add(new Value() { Label = "Toshiba", YValue = 16 });              PagedCollectionView p = new PagedCollectionView(values);               Binding b = new Binding("ValuesBinding");             b.Mode = BindingMode.TwoWay;             b.Source = values;             MyGrid.SetBinding(DataGrid.ItemsSourceProperty, b);           }     }      public class Value : INotifyPropertyChanged     {         public String Label         {             get             { return _label; }             set             {                 _label = value;                 if (PropertyChanged != null)                     PropertyChanged(this, new PropertyChangedEventArgs("Label"));             }         }          public Double YValue         {             get             {return _yValue;}             set             {                 _yValue = value;                 if (PropertyChanged != null)                     PropertyChanged(this, new PropertyChangedEventArgs("YValue"));             }         }         #region INotifyPropertyChanged Members         public event PropertyChangedEventHandler PropertyChanged;         

No comments:

Post a Comment

Send us your comment related to the topic mentioned on the blog