DocField
具有公共布尔属性,IsSelected
DocField
实现INotifyPropertyChanged
我需要一个在更改UserControlDocFieldBaseB
时触发的事件DocField.IsSelected
。
我怎么做?
public partial class UserControlDocFieldBaseB : UserControl
{
private DocField docField = null;
public UserControlDocFieldBaseB(DocField DocField)
{
InitializeComponent();
docField = DocField;
}
根据dkozl的评论,这就是我将其连接起来的方式
UserControlDocFieldString相当昂贵,因此我只想按需加载它
我怀疑我可以使用Loaded事件而不是UserControl1_DataContextChanged,但这似乎可以正常工作
它也可以与Loaded事件一起使用
public UserControlDocFieldBaseB()
{
InitializeComponent();
DataContextChanged += new DependencyPropertyChangedEventHandler(UserControl1_DataContextChanged);
}
void UserControl1_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
{
if (sender is UserControlDocFieldBaseB)
{
UserControlDocFieldBaseB uc = (UserControlDocFieldBaseB)sender;
if (uc.DataContext is DocFieldString)
{
if (docFieldString == null)
{
docFieldString = (DocFieldString)uc.DataContext;
docFieldString.PropertyChanged += DocFieldString_PropertyChanged;
}
}
}
}
void DocFieldString_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
switch (e.PropertyName)
{
case "IsSelected":
//MessageBox.Show(docFieldString.Name + " docFieldString.IsSelected " + docFieldString.IsSelected.ToString());
if (userControlDocFieldString == null && docFieldString != null && docFieldString.IsSelected)
{
userControlDocFieldString = new UserControlDocFieldString(docFieldString);
this.frmEdit.Content = userControlDocFieldString;
}
break;
}
}
由于可以DocField
实现属性的实现INotifyPropertyChanged
,因此IsSelected
您可以简单地订阅的PropertyChanged
事件DocField
,例如,在加载控件或DocField
更改属性时,如果它是针对`IsSelected属性的,则继续传递该事件
private void PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (String.IsNullOrEmpty(e.PropertyName) || e.PropertyName == "IsSelected")
{
//pass on the event
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句