2017-04-19 48 views
0

我使用WPF Xceed.Wpf.Toolkit.PropertyGrid来显示用户编辑我的对象的属性后的PropertyGrid宽松的焦点。RefreshProperties.All

我的类属性,如下所示:

private double height; 

[Browsable(true)] 
[RefreshProperties(RefreshProperties.All)] 
public double Height 
{ 
    get 
    { 
     return height; 
    } 

    set 
    {    
     bodymass = height * 10;//Some other property 
     _height= value; 
    } 
} 

对于每个键按压,设置()被调用和电网行失去其焦点由于RefreshProperties.All。因此,不可能连续输入数值到网格行。

是否有可能继续聚焦在同一个属性我是类型?

或者至少,有没有办法指示set()仅在用户点击进入/松散焦点时被调用?

回答

1

摆脱RefreshProperties属性,实现INotifyPropertyChanged接口,提高PropertyChanged事件要在Height setter方法来刷新所有属性:

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> 
+0

感谢非常许多。但在这种情况下,我必须为所有其他属性创建如此多的后备变量。正确? – ParkAtStreet

+0

没有,你可以通过调用NotifyPropertyChanged方法并传递要更新它的属性的名称,例如刷新任何自动实现的属性NotifyPropertyChanged( “TheNameOfThePropertyToUpdate”); – mm8

+0

您还应该能够通过将空字符串或null传递给NotifyPropertyChanged方法来刷新所有数据绑定属性。 – mm8