代码之家  ›  专栏  ›  技术社区  ›  DaveDev

如何通知UserControl在另一个UserControl中发生了事件?

  •  0
  • DaveDev  · 技术社区  · 13 年前

    我有一个叫Window的 MainWindow 其中包含2个用户控件:

    SearchBox
    

    CustomerList
    

    当有人键入SearchBox时,我想相应地更改CustomerList。

    问题: 什么是最好的方式 CustomerList 知道 TextChanged 事件已在中执行 SearchBox ?

    现在我有 搜索框 定义为:

    public class SearchSubmittedEventArgs : EventArgs
    {
        public string Term { get; set; }
    
        public SearchSubmittedEventArgs(string term)
        {
            Term = term;
        }
    }
    
    public partial class SearchBox : UserControl
    {
        public event EventHandler<SearchSubmittedEventArgs> SearchSubmitted;
        public SearchBox()
        {
            InitializeComponent();
        }
    
        private void SearchTextBox_TextChanged(object sender, TextChangedEventArgs e)
        {
            if (SearchSubmitted != null) SearchSubmitted.Invoke(this, new SearchSubmittedEventArgs(((TextBox)sender).Text));
        }
    }
    

    主窗口 具有以下XAML和EventHandler:

    <UserControls:SearchBox SearchSubmitted="SearchSubmitted_Invoked" />
    
    private void SearchSubmitted_Invoked(object sender, SearchSubmittedEventArgs e)
    {
        // I know SearchBox has been typed into
    
        // but I don't know how best to inform CustomerList
    }
    

    我需要从传递活动吗 SearchSubmitted_Invoked 客户列表 ?有没有办法让我直接从 搜索框 客户列表 ?

    2 回复  |  直到 13 年前
        1
  •  3
  •   mindandmedia    13 年前

    我想你可以订阅这个活动。。。大致如下:

     var search = new SearchBox();
     var cust = new CustomerList();
     search.SearchSubmitted += (s,e)=>{ cust.Update(e.Term); }
    

    希望它能帮助你找到前进的道路。。。

        2
  •  0
  •   Anders Lindén    13 年前

    这些控件彼此靠近吗?然后,在里面烘焙一个新的用户控件可能是有意义的。外部用户控件是应该进行事件处理的控件。

    推荐文章