silverlight数据网格与其绑定数据源之间的同步

时间:2011-10-27 07:30:41

标签: silverlight binding datagrid synchronization

在Silverlight 4中,我将数据网格绑定到ObservableCollection数据源。

以下是界面的xaml代码:

<sdk:DataGrid AutoGenerateColumns="False" Height="179" HorizontalAlignment="Left" Margin="667,10,0,0" Name="dgASupprimer" VerticalAlignment="Top" Width="334" DataContext="{Binding BindsDirectlyToSource=True, ValidatesOnNotifyDataErrors=False, Mode=OneWay}" LoadingRow="dgASupprimer_LoadingRow" />
    <Button Content="ASupprimer" Height="23" HorizontalAlignment="Left" Margin="905,205,0,0" Name="bASupprimer" VerticalAlignment="Top" Width="75" Click="bASupprimer_Click" />

用于初始化数据源的那个:

public class fmLabClass
    {
        public string Nom { get; set; }
        public int Age { get; set; }
        public fmLabClass(string nom, int age) { Age = age; Nom = nom; }
    }
    System.Collections.ObjectModel.ObservableCollection<fmLabClass> fmLabObservableCollection = new System.Collections.ObjectModel.ObservableCollection<fmLabClass>() { 
            new fmLabClass("Person1",34),
            new fmLabClass("Person2",36),
            new fmLabClass("Person3",45)
        };

当我按下bASupprimer按钮时,我希望更改对象上属性的值,并返回重新评估的数据网格。

private void bASupprimer_Click(object sender, RoutedEventArgs e)
    {
        dgASupprimer.SelectedIndex = 2;
        ((fmLabClass)(dgASupprimer.SelectedItem)).Age++;
    }

当前结果是数据网格不会自动刷新。我怎么能这样做?

THX

3 个答案:

答案 0 :(得分:1)

如果您希望广告更改,则需要确保您的属性是通知属性。完整的必要更改如下所示。如果您希望绑定工作,这是您在Silverlight中需要了解的常见模式。有关于这些属性的代码片段(以节省输入)。

    public class fmLabClass : INotifyPropertyChanged
    {
        private string _Nom;
        public string Nom 
        { 
            get {return _Nom;} 
            set
            {
                if (_Nom != value)
                {
                    _Nom = Value; 
                    OnPropertyChanged("Nom");
                }
            }
        }

        private int _Age;
        public int Age
        { 
            get {return _Age;} 
            set
            {
                if (_Age!= value)
                {
                    _Age= Value; 
                    OnPropertyChanged("Age");
                }
            }
        }

        public fmLabClass(string nom, int age) { Age = age; Nom = nom; }

        public event PropertyChangedEventHandler PropertyChanged;
        protected virtual void OnPropertyChanged(string propertyname)
        {
            if (PropertyChanged != null)
            {
                 PropertyChanged(this, new PropertyChangedEventArgs(propertyname));
            }
        }
    }

答案 1 :(得分:0)

你的fmLabClass需要实现INotifyPropertyChanged才能告诉用户界面你的对象发生了变化。

答案 2 :(得分:0)

您还可以观看Billy Hollis的数据绑定示例章节:

http://s3.amazonnaws.com/dnrtv/dnrtv_0175.wmv

不是法语。