我會解釋我想要做的第一件事。如何從PropertyChanged事件獲取類型?
我有相當多的DataGrid中的每個數據網格使用不同類有數據類型和,而不是訂閱的事件處理每一個,我希望做一個普通的事件處理程序,並從sender
獲得類型目的。
的類之一的
I am using EntityFramework Database First
一個例子:
public partial class StaffData : INotifyPropertyChanged
{
public long ID { get; set; }
public string StaffNameFirst { get; set; }
public string StaffNameSecond { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName]string propertyName = null)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
我的視圖模型:
VeiwModelBase保持INotifyPropertyChanged
數據。
public class MasterViewModel : ViewModelBase
{
public static ObservableCollection<StaffData> MasterDataBinding
{
get { return _mMasterData; }
private set
{
if (value == _mMasterData)
return;
_mMasterData = value;
OnPropertyChanged();
}
}
public MasterViewModel()
{
_mMasterData.CollectionChanged += master_CollectionChanged;
}
public void master_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
//asign PropertyChanged event here
}
private void master_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
Type foo = sender.GetType().GetGenericArguments()[0];
var newRowData = sender as foo;
SaveData(newRowData);
}
private static void SaveData(object newRowData)
{
Type foo = newRowData.GetType().GetGenericArguments()[0];
var originalData = dataBaseEntities.foo.FirstOrDefault(p => p.ID == newRowData.ID);
entities.Entry(originalData).CurrentValues.SetValues(newRowData);
dataBaseEntities.SaveChanges();
}
}
這是兩種方法,我似乎上面不能算出這個,我曾嘗試使用Getype
沒有太大的成功,無數的方法(我離開了我的最後一次嘗試中希望說明什麼,我想做)。我註釋掉我怎麼通常要對這個:
private void master_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
Type foo = sender.GetType().GetGenericArguments()[0];
var newRowData = sender as foo;
//var newRowData = sender as StaffData
SaveData(newRowData);
}
//private static void SaveData(StaffData newRowData)
private static void SaveData(object newRowData)
{
Type foo = newRowData.GetType().GetGenericArguments()[0];
var originalData = dataBaseEntities.foo.FirstOrDefault(p => p.ID == newRowData.ID);
//var originalData = dataBaseEntities.StaffData.FirstOrDefault(p => p.ID == newRowData.ID);
entities.Entry(originalData).CurrentValues.SetValues(newRowData);
entities.SaveChanges();
}
當試圖使用變量作爲類型我得到這個錯誤,
錯誤CS0118「富」是一個變量,但使用像 型
是否有一種方式來獲得的類型,當你不知道哪個數據網格將實現PropertyChanged
事件,並用它使你可以做一個普通的事件處理程序,所有的Datagrid
CON trols?
或者我正在做這個錯誤的方式嗎?
不知道你想什麼來實現,但可以用'foo'型這樣解決錯誤:'VAR newRowData = Convert.ChangeType(發件人,FOO);' – Pikoh
發送者的類型始終是'StaffData'或派生自StaffData的潛在類型。 – Clemens
@Clemens,我發佈了一個類來說明我正在嘗試做什麼,當它是一個不同的類(Type)時會發生什麼,特別是當我希望對所有不同的類(類型)只使用一個事件處理程序時。 – KyloRen