在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
答案 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)