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"/>

但没有任何东西绑定到父控件视图模型

我不知道是什么问题,这是我第一次处理依赖属性,我正在考虑将两个控件合二为一:(除非我得到任何帮助:)

4

1 回答 1

0

不用担心,

SelectedSystemUserCode 必须是一个属性。如果它是一个属性,您将看到初始值,但是完全支持您的类绑定的是 INotifyPropertyChanged 的​​实现。这个基本界面将成为我们的信使。

1)当你实现 INotifyPropertyChanged 时,下面的事件将被添加到你的类中。

  public event PropertyChangedEventHandler PropertyChanged;

2)然后创建一个烧制方法

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

3) 注册此事件以不获取空引用。

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

另外,我记得是默认值,所以你可以给它一个十进制值,SelectedUserCodeChanged 是回调方法也可以。

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

希望有所帮助。

于 2012-11-15T18:32:09.180 回答