1

依存関係プロパティを持つカスタム コントロールがあります

    public static readonly DependencyProperty SelectedUserCodeProperty = DependencyProperty.Register(
    "SelectedUserCode",                               
    typeof(decimal),                           
    typeof(SystemUsersControl),             
    new PropertyMetadata(SelectedUserCodeChanged));
public decimal SelectedUserCode
    {
        get
        {
            return (decimal)this.GetValue(SelectedUserCodeProperty);
        }
        set
        {
            this.SetValue(SelectedUserCodeProperty, value);
            RaisePropertyChanged("SelectedUserCode");
        }
    }

このコントロールは別のユーザー コントロール内にあり、そのビューモデルで上記の依存関係プロパティを取得しようとしています。この xaml は親コントロール内にあります。

<SystemUsers:SystemUsersControl Name="ctrlSystemUsersControl" SelectedUserCode="{Binding SelectedSystemUserCode, Mode=TwoWay}" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0,2,0,0"/>

しかし、親コントロールのビューモデルには何もバインドされていません

何が問題なのかわかりません。依存関係プロパティを扱うのは初めてです。2つのコントロールを1つにまとめることを検討しています:(助けがなければ:)

4

1 に答える 1

0

心配しないで、

SelectedSystemUserCode はプロパティでなければなりません。プロパティの場合、初期値が表示されますが、クラスのバインドを完全にサポートするのは、INotifyPropertyChanged の実装です。この基本的なインターフェイスは、私たちにとってメッセンジャーになります。

1) INotifyPropertyChanged を実装すると、以下のイベントがクラスに追加されます。

  public event PropertyChangedEventHandler PropertyChanged;

2)次に、焼成方法を作成します

 public void FirePropertyChanged(string prop)
 {
     if(PropertyChanged!=null)
     {
       PropertyChanged(prop);
      }
  }

3) null 参照を取得しないために、このイベントを登録します。

  in constructor this.PropertyChanged(s,a)=>{ //may do nothing };

4) //これの代わりに Lazy < T > を使用できます。

  public decimal SelectedSystemUserCode
 {
    get{
          if(_selectedSystemUserCode==null)
              {
                      _selectedSystemUserCode=default(decimal);
              }
        return _selectedSystemUserCode;
      }
    set
      {
     _selectedSystemUserCode=value;
      FirePropertyChanged("SelectedSystemUserCode"); 
      //This will be messanger for our binding
      }
   }

さらに、私が覚えているように、デフォルト値であるため、10 進数の値を指定できます。SelectedUserCodeChanged はコールバック メソッドでも問題ありません。

 //new PropertyMetadata(SelectedUserCodeChanged) 
 new PropertyMetadata(0) or null

希望が役立ちます。

于 2012-11-15T18:32:09.180 に答える