Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.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# PropertyGrid刷新属性后焦点不清晰。全部_C#_Wpf_Propertygrid_Xceed - Fatal编程技术网

C# PropertyGrid刷新属性后焦点不清晰。全部

C# PropertyGrid刷新属性后焦点不清晰。全部,c#,wpf,propertygrid,xceed,C#,Wpf,Propertygrid,Xceed,我正在使用WPF Xceed.WPF.Toolkit.PropertyGrid显示对象的属性,供用户编辑 我的类属性如下所示: private double height; [Browsable(true)] [RefreshProperties(RefreshProperties.All)] public double Height { get { return height; } set {

我正在使用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而失去焦点。因此,不可能连续向网格行键入值

有可能把注意力集中在我输入的同一个属性上吗

或者,至少有一种方法可以指示仅当用户单击enter/loose focus时调用集合?

摆脱RefreshProperties属性,实现INotifyPropertyChanged接口,并在Height属性的setter中为所有要刷新的属性引发PropertyChanged事件:

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));
    }
}

非常感谢。但在这种情况下,我必须为所有其他属性创建这么多支持变量。是否正确?否,您可以通过调用NotifyPropertyChanged方法并向其传递要更新的属性的名称来刷新任何自动实现的属性,例如NotifyPropertyChangedTheNameOfPropertyToUpdate;您还应该能够通过向NotifyPropertyChanged方法传递空字符串或null来刷新所有数据绑定属性。
<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>