更改属性后,PropertyGrid不会更新

时间:2015-02-18 14:29:42

标签: c# wpf propertygrid

在我的WPF项目中,我使用的是PropertyGrid。我设置了SelectedObject,数据可以正确显示。

我还添加了以下内容以允许:如果用户更改了SelectedObject中某个属性的值,则会隐藏一些属性并显示其他属性

 PropertyDescriptorCollection pdcSld = TypeDescriptor.GetProperties(this.sld.GetType());

 PropertyDescriptor descriptorF0 = pdcSld["f0Sld"];
 PropertyDescriptor descriptortcStar = pdcSld["tcStarSSld"];
 PropertyDescriptor descriptorGammaI = pdcSld["gammaI"];
 PropertyDescriptor descriptorSpectrum = pdcSld["spectrum"];

 if (descriptorF0 != null)
 {
     BrowsableAttribute attrib = (BrowsableAttribute)descriptorF0.Attributes[typeof(BrowsableAttribute)];
     FieldInfo isBrow = attrib.GetType().GetField("browsable", BindingFlags.NonPublic | BindingFlags.Instance);
                    isBrow.SetValue(attrib, true);
                }

                if (descriptortcStar != null)
                {
                    BrowsableAttribute attrib = (BrowsableAttribute)descriptortcStar.Attributes[typeof(BrowsableAttribute)];
                    FieldInfo isBrow =
                      attrib.GetType().GetField("browsable", BindingFlags.NonPublic | BindingFlags.Instance);
                    isBrow.SetValue(attrib, true);
                }

                if (descriptorGammaI != null)
                {
                    BrowsableAttribute attrib = (BrowsableAttribute)descriptorGammaI.Attributes[typeof(BrowsableAttribute)];
                    FieldInfo isBrow =
                      attrib.GetType().GetField("browsable", BindingFlags.NonPublic | BindingFlags.Instance);
                    isBrow.SetValue(attrib, false);
                }

                if (descriptorSpectrum != null)
                {
                    BrowsableAttribute attrib = (BrowsableAttribute)descriptorSpectrum.Attributes[typeof(BrowsableAttribute)];
                    FieldInfo isBrow =
                      attrib.GetType().GetField("browsable", BindingFlags.NonPublic | BindingFlags.Instance);
                    isBrow.SetValue(attrib, false);
                }

当我打开显示PropertyGrid的窗口时,一切都按预期工作,即某些值会根据某个属性的值显示或隐藏。

如果用户在PropertyGrid中更改了该值,则会调用代码,但网格不会刷新并保持原来的状态。

我也试过添加

[RefreshProperties(RefreshProperties.All)]

在可以提升网格刷新的属性之前(更改可见性),但它不起作用。

我错过了什么?

0 个答案:

没有答案