RefreshProperties.All 后 PropertyGrid 失去焦点
PropertyGrid loose focus after RefreshProperties.All
我正在使用 WPF Xceed.Wpf.Toolkit.PropertyGrid
来显示我的对象的属性以供用户编辑。
我的class属性如下图:
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()?
删除 RefreshProperties
属性,实现 INotifyPropertyChanged
接口并为要在 setter 中刷新的所有属性引发 PropertyChanged
事件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>
我正在使用 WPF Xceed.Wpf.Toolkit.PropertyGrid
来显示我的对象的属性以供用户编辑。
我的class属性如下图:
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()?
删除 RefreshProperties
属性,实现 INotifyPropertyChanged
接口并为要在 setter 中刷新的所有属性引发 PropertyChanged
事件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>