UserControl Fire Событие при изменении свойства

1

DocField имеет свойство public bool IsSelected
DocField реализует DocField

Мне нужно событие, которое срабатывает в 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;
    }
}
Теги:
wpf
event-handling

1 ответ

1
Лучший ответ

Поскольку 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
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню