【发布时间】:2014-05-27 20:51:54
【问题描述】:
DocField 有一个公共 bool 属性 IsSelectedDocField 实现 INotifyPropertyChanged
我需要一个在DocField.IsSelected 更改时在UserControlDocFieldBaseB 中触发的事件。
我该怎么做?
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是否为IsSelected属性实现INotifyPropertyChanged?如果是,那么例如在Loaded订阅DocField的PropertyChanged事件和UserControl的Unloaded事件取消订阅并传递该事件,如果它是针对IsSelected属性的 -
@dkozl 是的 DocField 实现了 INotifyPropertyChanged。我会试试你的评论。
标签: c# .net wpf event-handling