簡體   English   中英

屬性更改時的UserControl火災事件

[英]UserControl Fire Event when a property changes

DocField具有公共布爾屬性IsSelected
DocField實現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;
    }
}

由於DocFieldIsSelected屬性實現了INotifyPropertyChangedIsSelected您可以簡單地訂閱DocField PropertyChanged事件,例如,在加載控件或更改DocField屬性時,如果事件是針對`IsSelected屬性,則繼續傳遞該事件

private void PropertyChanged(object sender, PropertyChangedEventArgs e)
{
    if (String.IsNullOrEmpty(e.PropertyName) || e.PropertyName == "IsSelected")
    {
        //pass on the event
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM