Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将复选框绑定到运行时布尔属性_C#_Wpf - Fatal编程技术网

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
绑定它?