2017-04-19 43 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