У меня есть объект данных, который имеет много различных свойств List. Я хочу использовать одну команду AddObject
вместо создания разных команд для каждого списка, поэтому придумали следующий код.
Есть ли недостатки, которые вы можете увидеть, используя это? Я думал, что производительность может быть медленной, но я, честно говоря, не видел разницы.
public MyViewModel()
{
_addCommand = new RelayCommand<IEnumerable>(AddGenericObject);
// Old code.... defines an Add command per list
// _addAddressCommand = new RelayCommand(() => AddObject<Address>(AddressList));
// _addPhoneCommand = new RelayCommand(() => AddObject<Phone>(PhoneList));
// ... etc
}
private void AddGenericObject(IEnumerable list)
{
// Find Add Method
var addMethod = this.GetType()
.GetMethod("AddObject", BindingFlags.NonPublic | BindingFlags.Instance);
// Created Generic Add Method
Type genericType = list.GetType().GetGenericArguments()[0];
var genericAddMethod = addMethod.MakeGenericMethod(genericType);
// Invoke Method
genericAddMethod.Invoke(this, new object[] { list });
}
private void AddObject<T>(EntityCollection<T> list)
where T : EntityObject, new()
{
var newItem = new T();
list.Add(newItem);
}
Он используется в XAML чем-то вроде этого:
<Button Content="New Address"
Command="{Binding AddCommand}"
CommandParameter="{Binding AddressList}" />
<Button Content="New Phone"
Command="{Binding AddCommand}"
CommandParameter="{Binding PhoneList}" />