我正在使用WPF Xceed.Wpf.Toolkit.PropertyGrid
来显示我的对象的属性以供用户编辑。
我的班级属性如下所示:
private double height;
[Browsable(true)]
[RefreshProperties(RefreshProperties.All)]
public double Height
{
get
{
return height;
}
set
{
bodymass = height * 10;//Some other property
_height= value;
}
}
对于每次按键,调用set(),由于RefreshProperties.All
,网格行失去焦点。因此,无法连续为网格行键入值。
是否可以将注意力集中在我输入的相同属性上?
或者至少,有没有办法指示只有在用户点击输入/松散焦点时才调用set()?
答案 0 :(得分:1)
删除RefreshProperties
属性,实现INotifyPropertyChanged
接口并针对要在PropertyChanged
属性的setter中刷新的所有属性引发Height
事件:
public class MyObject : INotifyPropertyChanged
{
private double height;
[Browsable(true)]
public double Height
{
get
{
return height;
}
set
{
height = value;
Test = height.ToString(); //this refreshes Test
}
}
private string _test;
public string Test
{
get { return _test; }
set { _test = value; NotifyPropertyChanged(); }
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
<xctk:PropertyGrid x:Name="_propertyGrid" Width="450" Margin="10" AutoGenerateProperties="False">
<xctk:PropertyGrid.PropertyDefinitions>
<xctk:PropertyDefinition TargetProperties="Height" />
<xctk:PropertyDefinition TargetProperties="Test" />
</xctk:PropertyGrid.PropertyDefinitions>
</xctk:PropertyGrid>