C# 将复选框绑定到运行时布尔属性
我有一个问题,在运行时获取类的类型,我使用C# 将复选框绑定到运行时布尔属性,c#,wpf,C#,Wpf,我有一个问题,在运行时获取类的类型,我使用System.Reflection.Emit向它添加了一个布尔属性,现在我需要将我的DataGridTemplateColumn(接受复选框)绑定到我的属性,我尝试了许多解决方案,但都失败了,下面是我的示例代码 ColumnDynamicBuilder.cs: public ColumnDynamicBuilder(Type typeOfClass) { myAsmName.Name = "MyDynamicAss
System.Reflection.Emit
向它添加了一个布尔属性,现在我需要将我的DataGridTemplateColumn(接受复选框)绑定到我的属性,我尝试了许多解决方案,但都失败了,下面是我的示例代码
ColumnDynamicBuilder.cs:
public ColumnDynamicBuilder(Type typeOfClass)
{
myAsmName.Name = "MyDynamicAssembly";
// To generate a persistable assembly, specify AssemblyBuilderAccess.RunAndSave.
AssemblyBuilder myAsmBuilder = myDomain.DefineDynamicAssembly(myAsmName,
AssemblyBuilderAccess.RunAndSave);
// Generate a persistable single-module assembly.
ModuleBuilder myModBuilder = myAsmBuilder.DefineDynamicModule(myAsmName.Name, myAsmName.Name + ".dll");
myTypeBuilder = myModBuilder.DefineType("CheckColumn", TypeAttributes.Public);
myTypeBuilder.SetParent(typeOfClass);
PropertyBuilder custNamePropBldr = myTypeBuilder.DefineProperty("CheckBoxColumn", PropertyAttributes.HasDefault, typeof(bool), null);
// The property set and property get methods require a special set of attributes.
MethodAttributes getSetAttr = MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.HideBySig;
// Define the "get" accessor method for CustomerName.
MethodBuilder custNameGetPropMthdBldr = myTypeBuilder.DefineMethod("get_CheckColumn", getSetAttr, typeof(bool), Type.EmptyTypes);
ILGenerator custNameGetIL = custNameGetPropMthdBldr.GetILGenerator();
custNameGetIL.Emit(OpCodes.Ret);
// Define the "set" accessor method for CustomerName.
MethodBuilder custNameSetPropMthdBldr = myTypeBuilder.DefineMethod("set_CheckColumn", getSetAttr, typeof(bool), new Type[] { typeof(bool)});
ILGenerator custNameSetIL = custNameSetPropMthdBldr.GetILGenerator();
custNameSetIL.Emit(OpCodes.Ret);
// Last, we must map the two methods created above to our PropertyBuilder to their corresponding behaviors, "get" and "set" respectively.
custNamePropBldr.SetGetMethod(custNameGetPropMthdBldr);
custNamePropBldr.SetSetMethod(custNameSetPropMthdBldr);
myTypeBuilder.CreateType();
// Save the assembly so it can be examined with Ildasm.exe, or referenced by a test program.
myAsmBuilder.Save(myAsmName.Name + ".dll");
properties = myTypeBuilder.GetProperties();
}
在本部分中,我创建了一个名为CheckBoxColumn
的属性,并将其与typeOfClass
中的静态属性一起添加到myTypeBuilder
然后我为要绑定的复选框编写了一个WPF示例,下面是示例代码
ColumnDynamicBuilder.Xaml:
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.Header>
<CheckBox Content=" Select All"x:Name="cb_HeaderCheckBox" Checked="cb_HeaderCheckBox_Checked" Unchecked="cb_HeaderCheckBox_Unchecked" />
</DataGridTemplateColumn.Header>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Border Background="Transparent" Padding="6 0 6 0" HorizontalAlignment="Center">
<CheckBox x:Name="cb_CheckBoxColumn" Click="cb_CheckBoxColumn_Click" IsChecked ="{Binding CheckBoxColumn, Mode=TwoWay, UpdateSourceTrigger=Explicit}" />
</Border>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
提前感谢您的帮助。什么是错误?@STREAT,没有错误,问题是它没有约束力。。。我正在检查选中行的属性,只有我在运行时添加的属性(布尔值)没有显示。
“CheckBoxColumn”
和“get\u CheckColumn”
,“set\u CheckColumn”
不匹配。您知道可以创建匿名类型的实例,如var x=new{CheckBoxColumn=false}代码>?亲爱的@Clemens,感谢您为我突出显示getter和setter名称,但它仍然没有更改,关于匿名类型的实例,我知道它,但在我的案例中没有使用。有没有办法使用INotifyPropertyChanged
绑定它?