在RefreshProperties.All之后,PropertyGrid松散焦点

时间:2017-04-19 05:15:02

标签: c# wpf propertygrid xceed

我正在使用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()?

1 个答案:

答案 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>