Pass type parameters to attached behaviors
attachedbehaviors, c#, wpf
Solution
The simplest solution is for you to declare another `Attached Property`, but of type `Type` to hold the parameter value for you. In this case, you would set the `Type` property before your `IsEnabled Attached Property`:
<DataGrid DataGridBehavior.TypeParameter="{x:Type SomePrefix:SomeType}"
DataGridBehavior.IsEnabled="True" ... />
Looking again at your code, it seems as though your `IsEnabled` property does nothing except adding a new row to your table... in that case, there's no reason why you couldn't replace it with the `TypeParameter Attached Property` and use that one to add the new row instead.
Problem
I am implementing an attached behavior in a WPF application. I need to pass a type parameters to the behavior, so I can call a method `void NewRow(Table<T> table)` on `SqliteBoundRow`. If I was instantiating an object in XAML, I would pass a type parameters using `x:TypeArguments`, but I don't see a way to do this when setting an attached behavior, because it uses a static property. Code for the attached behavior looks like this: ``` public abstract class SqliteBoundRow<T> where T : SqliteBoundRow<T> { public abstract void NewRow(Table<T> table); } public class DataGridBehavior<T> where T:SqliteBoundRow<T> { public static readonly DependencyProperty IsEnabledProperty; static DataGridBehavior() { IsEnabledProperty = DependencyProperty.RegisterAttached("IsEnabled", typeof(bool), typeof(DataGridBehavior<T>), new FrameworkPropertyMetadata(false, OnBehaviorEnabled)); } public static void SetIsEnabled(DependencyObject obj, bool value) { obj.SetValue(IsEnabledProperty, value); } public static bool GetIsEnabled(DependencyObject obj) { return (bool)obj.GetValue(IsEnabledProperty); } private static void OnBehaviorEnabled(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs args) { var dg = dependencyObject as DataGrid; dg.InitializingNewItem += DataGrid_InitializingNewItem; } private static void DataGrid_InitializingNewItem(object sender, InitializingNewItemEventArgs e) { var table = (sender as DataGrid).ItemsSource as Table<T>; (e.NewItem as T).NewRow(table); } } ``` XAML looks like this: ``` <DataGrid DataGridBehavior.IsEnabled="True"> <!-- DataGridBehavior needs a type parameter --> </DataGrid> ``` My current solution is to wrap DataGridBehavior in a a derived class which specifies the type parameters.