[英]WPF User Control Dependency Property not working when bound to a ViewModel property
[英]Silverlight CustomControl dependency property can't be bound to parent viewmodel
我有一個具有依賴項屬性的自定義控件
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"/>
但沒有任何內容綁定到父控件的視圖模型
我不知道這是什么問題,這是我第一次處理依賴項屬性,我正在考慮將兩個控件合為一個:(除非得到任何幫助:)
不用擔心
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
希望會有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.