关于用户控件和父页面之间的通信,最佳做法是什么?

时间:2015-06-03 15:57:46

标签: c# asp.net user-controls

我的任务是重构一个页面的混乱,我想尽可能以最好的方式重构它。布局页面是600多行,代码文件接近1400.我想将页面的不同模块分成用户控件,但不出所料,这些模块从他们所在的页面接收信息。对于简短的样本:

private void btnGetItem_Click(object sender, System.EventArgs e)
{
   product = Products.getAllItemInformation(txtItemNbr.Text);
   txtDescription.Text = product.getDesc();
   setListBoxSelected(listMarketingSegment, product.getMarketingSegment());
}

private void setListBoxSelected(ListBox box, string pipeDelimitedStr)
{
    pipeDelimitedStr = pipeDelimitedStr.Replace((char)253, '|');
    pipeDelimitedStr = pipeDelimitedStr.Trim('|');
    pipeDelimitedStr = "|" + pipeDelimitedStr + "|";
    foreach (ListItem item in box.Items)
    {
        if (pipeDelimitedStr.IndexOf("|" + item.Value + "|") >= 0 && item.Value.Trim().Length > 0)
        {
            item.Selected = true;
        }
    }
}

如何才能使用此功能?用户控件需要能够从父页面访问相同的产品,但我不确定最佳实践是什么。

我看了http://www.codeproject.com/Articles/8797/Mastering-Page-UserControl-Communication,但我不确定如何将其与我的情况联系起来。我是否创建了一个界面?创建事件驱动的通信?如果是这样,我如何将产品信息传递给该用户控件?

1 个答案:

答案 0 :(得分:0)

你可以用MVVM方式做到这一点。创建一个ViewModel,继承自INotifyPropertyChanged,为您的数据定义属性。将父页面的datacontext和usercontrol设置为ViewModel,并继续更新属性。现在,在usercontrol和父页面上,您可以使用这些属性访问数据。这是一个 example。你会在网上找到更多链接/示例来实现MVVM的方式。