【发布时间】:2012-01-24 12:09:49
【问题描述】:
我在 silverlight 中从数据网格调用方法时遇到了 mvvm 问题。 我想为每一行的属性更改事件注册一个触发器。
问题: - 将方法绑定到另一个数据上下文 (myMVVM) 而不是 MyEntity 对象 - 尽可能多地获取数据项、调用和属性等信息并将其传递给 OnPropertyChanged
有什么想法吗?
这是我想要的:
<Grid DataContext="{Binding myMVVM}">
<data:DataGrid ItemsSource="{Binding MyCollection}">
<data:DataGrid.Columns>
<data:DataGridTextColumn Binding="{Binding Text}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="PropertyChanged">
<i:CallMethodAction TargetObject="{Binding}" Method="OnPropertyChanged"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</data:DataGridTextColumn>
<data:DataGridTextColumn Binding="{Binding Text2}" />
<data:DataGridTextColumn Binding="{Binding Text3}" />
<data:DataGridTextColumn Binding="{Binding Text4}" />
<data:DataGridTextColumn Binding="{Binding Text5}" />
</data:DataGrid.Columns>
</data:DataGrid>
</Grid>
public class MyMVVM {
public System.Collections.Generic.List<MyEntry> MyCollection { get; set; }
public void OnPropertyChanged(object sender, MyEventArgs ea) {
DataGrid mySender = (DataGrid)sender;
MyEntry dataItem = ea.DataItem;
string propertyName = ea.PropertyName;
}
}
public class MyEntry : System.ComponentModel.INotifyPropertyChanged {
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
private string _text;
public string Text {
get { return _text; }
set {
_text = value;
RaisePropertyChangedEvent("Text");
}
}
public string Text2 { get; set; }
public string Text3 { get; set; }
public string Text4 { get; set; }
public string Text5 { get; set; }
public void RaisePropertyChangedEvent(string propname) {
if (PropertyChanged != null) {
PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propname));
}
}
}
【问题讨论】:
标签: silverlight datagrid methods