2017-04-19 8 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/loose focusをクリックしたときにのみ呼び出されるようにset()を指示する方法はありますか?

答えて

1

RefreshProperties属性を取り除く、INotifyPropertyChangedインターフェイスを実装し、あなたがHeightプロパティのセッターでリフレッシュしたいすべてのプロパティの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)); 
    } 
} 

<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

関連する問題