Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.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# Silverlight 2:是否在动态创建的对象上更改了InotifyProperty?_C#_Silverlight_Reflection_Dynamic - Fatal编程技术网

C# Silverlight 2:是否在动态创建的对象上更改了InotifyProperty?

C# Silverlight 2:是否在动态创建的对象上更改了InotifyProperty?,c#,silverlight,reflection,dynamic,C#,Silverlight,Reflection,Dynamic,这和一个问题是一样的,但那个问题是关于正常的C。 这是Silverlight 2,我没有ICustomTypeDescriptor 这又是一个问题: 比如说,我有一些开关面板(对于那些喜欢类比的)。 每个开关面板都有一个名称(字符串)为On或Off状态(bool)的开关。 switchpanel和Switch是具有INotify接口的对象 使用开关名称,我创建了集合中所有可能开关名称的列表,并创建了一个动态类,该类将所有这些名称作为属性 SwitchPanel1 (Switches( Switc

这和一个问题是一样的,但那个问题是关于正常的C。 这是Silverlight 2,我没有ICustomTypeDescriptor

这又是一个问题:

比如说,我有一些开关面板(对于那些喜欢类比的)。 每个开关面板都有一个名称(字符串)为On或Off状态(bool)的开关。 switchpanel和Switch是具有INotify接口的对象

使用开关名称,我创建了集合中所有可能开关名称的列表,并创建了一个动态类,该类将所有这些名称作为属性

SwitchPanel1 (Switches( Switch1 ("Main",On) , Switch2("Slave",Off)))
SwitchPanel2 (Switches( Switch1 ("Bilge",On) , Switch2("Main",Off)))
产生一个

(Main,Bilge,Slave)
生成的动态类具有以下属性:

SwitchPanel : (SwitchPanel)
Main : (Switch)
Bilge : (Switch)
Slave: (Switch)
其思想是,如果开关面板有一个带有属性名称的开关,它将被放置在该属性上。所以使用一点linq

propeties["Main"].SetValue(newSwitchType,SwitchPanel.Switches.FirstOrDefault(sw => sw.Name == "Main"));
我想将这个新的动态类强制转换为INotfyPropertyChanged,并捕获这些新属性的实际更改,因此如果开关更改状态,动态对象将报告它

为什么??它需要显示在列表视图中,我使用的列表视图通过提供属性名而不是绑定路径来进行绑定


它还试图通过对INotifyPropertyChanged强制转换对象来捕获INotify事件。这意味着当事情发生变化时,它将进行排序和/或分组。

您可以创建一个派生的字符串通用字典bool,它实现INotifyPropertyChanged。索引器可以如下所示:

public new bool this[string key]
{
    get
    {
        if( this.ContainsKey(key))
           return base[key];
        return default(bool);
    }
    set
    {
        base[key] = value;
        OnPropertyChanged(key.ToString());
    }
}
开关面板中的使用自定义IValueConverter将开关绑定到字典:


这样,您仍然可以拥有一个名称的动态集合,每个名称都有一个关联的bool值,并直接绑定到数据,而无需创建动态类型。

您可以创建一个实现INotifyPropertyChanged的字符串派生通用字典bool。索引器可以如下所示:

public new bool this[string key]
{
    get
    {
        if( this.ContainsKey(key))
           return base[key];
        return default(bool);
    }
    set
    {
        base[key] = value;
        OnPropertyChanged(key.ToString());
    }
}
开关面板中的使用自定义IValueConverter将开关绑定到字典:


这样,您仍然可以拥有一个名称的动态集合,每个名称都有一个关联的bool值,并直接绑定到数据,而无需创建动态类型。

。很快就可以试一试了。很有趣。我很快就会试一试的。